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