SpyOn
Vamos falar da função do Jest que pode ser usada para se criar espiões, como nos filmes!
Last updated
Vamos falar da função do Jest que pode ser usada para se criar espiões, como nos filmes!
Last updated
Fonte: documentação
Códigos aqui, contudo, tenta primeiro!
Essa função é usada para se criar "espiões": uma função que garante que um determinado método é chamado.
Nota 28/10/21. existe uma frase no mundo dos testes que diz "testa comportamento, não implementação". O motivo é que ao se testar implementaçao, se injessa o código, tornando refazer (refactoring) depois difícil ou mesmo impossível. Isso quer dizer que spies devem ser usado com cautela, uma vez que "olham" dentro do código, criando testes que pode ser específicos a uma implementação.
Da documentação oficial do Jest:
Agora, precisamos do teste:
Geralmente, espião somente olha🧐🧐, contudo, Jest possibilita também de se tomar "providências", vamos precisar disso no nosso teste.
Na linha 4, além de espiar na linha 3, dizemos o que deve ser feito: estamos reinscrevendo o método sendo espionado. Por que?? Como será visto, essa abordagem de cadeia é necessária para garantir a execução do Mongoose.
Note que estamos com dois expects no mesmo teste, geralmente isso não é uma boa prática. Faça você mesmo o teste, faça o teste falhar, não vai saber qual expect falhou! 😂🤣
É resposta é não, contudo, no caso do Mongoose, vamos precisar devido ao funcionamento interno do Mongo, em forma de queries.
O código abaixo faz o mesmo, contudo separa cada atividade. Para iniciantes, como eu, eu sugiro usar notações como essa, aberta, onde sabemos onde esta o mock, e onde está o spy.
Eu gosto muito da curiosidade, mesmo que seja o óbvio.
Quando comecei a estudar mock/stubs, tive dificuldades de entender a diferença, as definições pareciam apontar para a mesma coisa, até que li o livro de Christian Johansen. Esse autor separa claramente o monitoramento do comportamento vs. estado.
O problema, como vamos ver no caso do Jest, é que nem sempre é linear essa transformação entre teoria e ferramenta. Por isso defendo de programador ler, para não ficar amarrado a nenhum framework. Conhecimento flui, ferramentas vai e vem.
No nosso caso, o que dificultou meu entendimento do Jest, é que precisamos misturar mock com spy para ter o efeito que Christian Johansen chama de behavior verification. Acho que isso seria o famoso mock, e state verification seria o stub; mesmo que esteja errado nessa associação, achei fácil de lembrar e desligar meu cérebro de ficar disparando, quando não entendo algo.
Note que o método dispersion está dentro de uma cadeia de métodos.
Códigos aqui.
Livro mencionado Test-Driven JavaScript Development By Christian Johansen · 2010.
Abri uma discussão no Stack Overflow aqui.
No momento que abri essa discussão, fui votado para baixo (downvoted). Quando comecei a usar o Stack Overflow, ficava chateado; agora, depois de ver o que eles votam para baixo, não me sinto mais ofendido. Eu concordo que muito provavelmente essa pessoa é uma "babaca". Eu gosto muito das colocação desse YouTuber, contudo, ainda acho que o Stack Overflow, vale a pena. Eu sou editor da Wiki por anos, e não foi fácil. Qualquer comunidade online terá esses problemas. Não deixe essas pessoas tiraram o melhor desses fóruns, sempre houve e sempre haverá babacas, agora e-babacas.