Diferença entre Fn, Mock e SpyOn
- #TypeScript
Os métodos jest.fn(), jest.mock() e jest.spyOn() são todos recursos oferecidos pelo Jest, um framework de testes para JavaScript, mas têm finalidades diferentes.
jest.fn()
É usado para criar uma função simulada (mock function) que pode ser passada como argumento para outras funções durante os testes.
A mock function é capaz de registrar informações sobre quantas vezes foi chamada, com quais argumentos e o valor que retornou.
Ela é útil para simular comportamentos específicos de funções que podem ser difíceis ou impossíveis de testar em um ambiente real.
Por exemplo, podemos usar jest.fn() para simular uma chamada de API e verificar se a função que a consome lida corretamente com a resposta.
jest.mock()
É usado para substituir uma dependência de um módulo por uma mock function.
Isso é útil quando queremos testar um módulo que depende de outros módulos externos, como uma API ou banco de dados, e não queremos que os testes sejam afetados por alterações nessas dependências.
A mock function criada por jest.mock() pode ser configurada para retornar valores específicos ou gerar erros quando é chamada.
jest.spyOn()
É usado para criar uma mock function que espiona (spy) uma função existente.
Isso significa que a função original é executada normalmente, mas podemos verificar se ela foi chamada corretamente ou quantas vezes foi chamada, e também podemos modificar seu comportamento para atender às necessidades do teste.
jest.spyOn() é útil quando queremos testar uma função que já existe em um módulo, mas precisamos de mais controle sobre como ela é chamada ou seu comportamento.
Em conclusão, podemos afirmar que o método jest.fn() é útil para criar uma mock function genérica, enquanto o jest.mock() é útil para substituir dependências externas de módulos por mock functions.
Já o jest.spyOn() é usado para espionar e modificar o comportamento de funções existentes.
Vamos ver na prática?
Acesse o Catálogo DIO e entre na Formação Typescript fullstack Developer.
Vamos aprender juntos...