Como posso adicionar várias expectativas should_receive sobre um objeto usando RSpec?

StackOverflow https://stackoverflow.com/questions/244009

  •  04-07-2019
  •  | 
  •  

Pergunta

Na minha Rails controlador, eu estou criando várias instâncias da mesma classe de modelo. Quero acrescentar algumas expectativas RSpec para que eu possa testar se ele está criando o número correto com os parâmetros corretos. Então, aqui está o que eu tenho na minha spec:

Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => @user.id, :position_id => 1, :is_leader => true)
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => "2222", :position_id => 2)
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => "3333", :position_id => 3)
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => "4444", :position_id => 4)

Isso está causando problemas porque parece que a classe colega de banda pode ter apenas 1 set expectativa "should_receive" nele. Então, quando eu executar o exemplo, eu recebo o seguinte erro:

Spec::Mocks::MockExpectationError in 'BandsController should create all the bandmates when created'
Mock 'Class' expected :create with ({:band_id=>1014, :user_id=>999, :position_id=>1, :is_leader=>true}) but received it with ({:band_id=>1014, :user_id=>"2222", :position_id=>"2"})

Esses são os parâmetros corretos para a segunda chamada para criar, mas RSpec está testando contra os parâmetros errados.

Alguém sabe como posso configurar as minhas expectativas should_receive para permitir várias chamadas diferentes?

Foi útil?

Solução

Vários expectativas não são um problema de todos. O que você está correndo para se encomendar problemas, dado seus argumentos específicos sobre as expectativas não ordenadas. Verifique este página para obter detalhes sobre as expectativas de ordenação.

A história curta é que você deve adicionar .ordered ao final de cada uma das suas expectativas.

Outras dicas

Mock Receba Counts

my_mock.should_receive (: sym) .Uma vez
my_mock.should_receive (: sym) .twice
my_mock.should_receive (: sym) .exactly (n) .times
my_mock.should_receive (: sym) .at_least (: uma vez)
my_mock.should_receive (: sym) .at_least (: duas vezes)
my_mock.should_receive (: sym) .at_least (n) .times
my_mock.should_receive (: sym) .at_most (: uma vez)
my_mock.should_receive (: sym) .at_most (: duas vezes)
my_mock.should_receive (: sym) .at_most (n) .times
my_mock.should_receive (: sym) .any_number_of_times

Obras para rspec 2.5 também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top