Rachid Calazans de Viveiros

August 4, 2021

RSpec Mock - Utilizando método allow para múltiplas mensagens

Quando precisamos permitir que um mock object receba chamadas para os métodos, normalmente utilizamos o método allow do RSpec:

object = double

allow(object).to receive(:foo).and_return(11)

expect(object.foo).to be == 11

E quando precisamos permitir que aconteça múltiplas chamadas de diferentes métodos (múltipla mensagens do objeto)  para o mesmo objeto podemos fazer assim:

object = double

allow(object).to receive(:foo).and_return(11)
allow(object).to receive(:buzz).and_return('Hello')

expect(object.foo).to be == 11
expect(object.buzz).to eql 'Hello'

Porém dessa forma nós precisamos repetir a chamada do método allow múltiplas vezes, alterando o parâmetro do receive. No RSpec existe um outro método que aceita múltiplos valores, o que é mais indicado para utilizar quando a situação acima acontece:

object = double

allow(object).to receive_messages(foo: 11, buzz: 'Hello')

expect(object.foo).to be == 11
expect(object.buzz).to eql 'Hello'

O método receive_messages permite que passemos um Hash com os valores que queremos fazer o mock.

Obrigado.

Referências

1. Relishapp Doc - allowing messages