Estou tentando descobrir a melhor forma de abordar o caso de uso em brincadeira.
Eu não quero zombar da função, apenas espioná-la e deixar a implementação original fazer o trabalho. Digamos que eu queira rastrear quantas vezes a consulta foi chamada no driver postgres. A seguinte abordagem funciona:
const querySpy = pg.Client.prototype.query = jest.fn(pg.Client.prototype.query);
expect(querySpy.mock.calls.length).toBe(2)
O problema é que também tenho que atribuir a implementação original no final do teste para que não afete outras no mesmo arquivo. Portanto, é simples quebrar o isolamento do teste se uma pessoa esquecer essa limpeza.
Eu também notei que jasmine tem spyOn que parece funcionar de brincadeira também (mas não documentado), o que é bastante elegante, então a mesma coisa pode ser alcançada por:
const querySpy = spyOn(pg.Client.prototype, 'query').and.callThrough();
expect(querySpy.calls.count()).toEqual(3);
E o jasmine afirma remover o espião após o teste automaticamente, o que é incrível.
Mas não tem certeza se isso é algo que se tornará parte oficial da brincadeira? O problema é que os espiões de jasmim têm uma interface diferente dos mocks em brincadeira. Então, acho que o melhor seria apenas estender a funcionalidade simulada para que possa ser facilmente usada para espionagem usando spyOn
ou algo semelhante.
Qualquer feedback bem-vindo.
Isso é rastreado como parte de #1679.
Talvez incorreto sobre isso, mas o expect.spyOn
não é diferente do jasmines spyOn
, pois não faz a 'restauração automática' reivindicada no final de um teste? Eu acho que esse recurso é bem legal e limpa os arquivos de especificações. Haverá algum plano para adicionar esse tipo de funcionalidade ao integrar o #1679?
Veja também #2534.
Comentários muito úteis
Talvez incorreto sobre isso, mas o
expect.spyOn
não é diferente do jasminesspyOn
, pois não faz a 'restauração automática' reivindicada no final de um teste? Eu acho que esse recurso é bem legal e limpa os arquivos de especificações. Haverá algum plano para adicionar esse tipo de funcionalidade ao integrar o #1679?