Jest: funcionalidade espião

Criado em 20 set. 2016  ·  3Comentários  ·  Fonte: facebook/jest

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.

Comentários muito úteis

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?

Todos 3 comentários

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.

Esta página foi útil?
0 / 5 - 0 avaliações