O que é um Spy?
Um spy envolve uma função e registra como ela foi chamada para que você possa fazer asserções sobre essas chamadas sem necessariamente substituir o seu comportamento.
Um spy fica entre um stub e um mock. Como um mock, ele registra chamadas para que você possa fazer asserções sobre elas. Ao contrário de um mock, ele frequentemente envolve a implementação real e a deixa executar, apenas observando de passagem. Os spies são úteis quando você quer o comportamento real, mas ainda precisa confirmar que uma interação aconteceu.
O que um spy registra
Um spy mantém um registro de cada chamada: os argumentos, a ordem, o número de vezes e, às vezes, os valores de retorno. Você então faz asserções contra esse registro. A função que ele envolve pode executar normalmente, ser parcialmente sobrescrita ou totalmente substituída, dependendo de como você configura o spy.
Spy versus mock versus stub
- Stub: fornece respostas predefinidas, não registra nada.
- Spy: geralmente envolve o comportamento real e registra chamadas.
- Mock: substitui o comportamento e é configurado com expectativas de chamada.
- A linha entre spy e mock é tênue entre os frameworks.
Um exemplo rápido
Você pode fazer spy em um logger para confirmar que ele foi invocado, ainda deixando o log real executar, fazendo asserções sobre a chamada registrada depois.
const spy = jest.spyOn(logger, "warn");
doRiskyThing();
expect(spy).toHaveBeenCalledTimes(1);Quando um spy é a ferramenta certa
Recorra a um spy quando quiser verificar que um efeito colateral ocorreu, como um evento de analytics ou uma linha de log, sem alterar o comportamento sob teste. Ele é menos invasivo que um mock e mais observador que um stub.
Spies em uma suíte de CI
Os spies vivem quase inteiramente em testes unitários rápidos, então não adicionam instabilidade ou lentidão significativas no CI. Eles ajudam a manter os testes na base barata da pirâmide, onde o feedback é mais rápido, mesmo em suítes grandes rodando em runners rápidos.
Principais conclusões
- Um spy registra como uma função foi chamada para asserções posteriores.
- Ele frequentemente envolve o comportamento real em vez de substituí-lo.
- Use um spy para verificar efeitos colaterais sem alterar o comportamento.