Testes: mocking vs stubbing
Este curso trata do rspec-mocks e da diferença entre stub e mock. Um stub, feito com allow, substitui um valor de retorno e nunca falha. Um mock, feito com expect, faz o teste falhar quando a chamada esperada não acontece. As aulas usam os specs do próprio app. Elas tratam do instance_double, que checa os métodos com stub contra a classe real, e comparam dois specs do CompleteLessonService com escolhas opostas. Um double feito à mão mostra o mecanismo, e um desafio em Ruby fecha o curso.
O que você vai aprender
- ✓Como um stub com allow(...).to receive(...).and_return(...) substitui um valor de retorno
- ✓Como um mock com expect(...).to receive(...) faz o teste falhar se a chamada não acontece
- ✓Como o instance_double checa os métodos com stub contra os métodos de instância da classe real
- ✓Quando fazer stub de um colaborador e quando testar com objetos reais
- ✓Como montar à mão um pequeno objeto de stub e mock com method_missing
O que é o rspec-mocks, e quanto este app já o usa
O rspec-mocks vem junto com o rspec-rails, o framework de testes em que os cursos de testes anteriores já se apoiaram; o bundle show rspec-mocks mostra a versão 3.13.8. Não há nada para instalar neste curso. Ele já roda neste app toda vez que o bundle exec rspec roda.
Ler a aula completa grátis →Currículo
7 aulasO que é o rspec-mocks, e quanto este app já o usa
Apresenta o rspec-mocks, mostra onde os specs do app já o usam e separa stubs de mocks.
Um stub substitui um valor de retorno, e nunca falha como quer que seja chamado
Mostra como o allow substitui um valor de retorno sem falhar, com a cadeia ImageProcessing::Vips como exemplo.
Um mock afirma que uma chamada aconteceu, e faz o teste falhar se ela nunca acontece
Explica como o expect afirma uma chamada com certos argumentos e falha pela checagem verify_messages_received.
instance_double: um stub que se checa contra a classe real
Compara um double simples com o instance_double, que recusa métodos ausentes na classe real, inclusive métodos de classe.
Quando fazer stub de um colaborador vale a pena: o CompleteLessonService deste app
Compara um spec de serviço com objetos reais a um request spec que faz stub do CompleteLessonService inteiro.
Montando um double de teste do zero, sem gem
Remonta o mecanismo central de stub e mock em Ruby puro, usando method_missing e dois hashes.
Juntando tudo: uma gem, duas ferramentas, uma decisão a cada vez
Revisa stubs, mocks, instance_double e o double feito à mão, e propõe um desafio em Ruby sem RSpec.