¿Cómo puedo agregar múltiples expectativas que deban recibirse en un objeto utilizando RSpec?

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

  •  04-07-2019
  •  | 
  •  

Pregunta

En mi controlador Rails, estoy creando varias instancias de la misma clase de modelo. Quiero agregar algunas expectativas de RSpec para poder probar que está creando el número correcto con los parámetros correctos. Entonces, esto es lo que tengo en mi especificación:

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)

Esto está causando problemas porque parece que la clase Bandmate solo puede tener 1 " should_receive " expectativa puesta en ella. Entonces, cuando ejecuto el ejemplo, aparece el siguiente error:

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"})

Esos son los parámetros correctos para que se cree la segunda llamada, pero RSpec está probando contra los parámetros incorrectos.

¿Alguien sabe cómo puedo configurar mis deberes para recibir las expectativas y permitir múltiples llamadas diferentes?

¿Fue útil?

Solución

Las expectativas múltiples no son un problema en absoluto. Lo que está encontrando son problemas de orden, dados sus argumentos específicos sobre expectativas desordenadas. Consulte esta página para obtener detalles sobre las expectativas de pedidos.

El cuento es que debes agregar .ordered al final de cada una de tus expectativas.

Otros consejos

Mock Receive Counts

my_mock.should_receive (: sym) .once
  my_mock.should_receive (: sym) .twice
  my_mock.should_receive (: sym) .exactly (n) .times
  my_mock.should_receive (: sym) .at_least (: once)
  my_mock.should_receive (: sym) .at_least (: dos veces)
  my_mock.should_receive (: sym) .at_least (n) .times
  my_mock.should_receive (: sym) .at_most (: once)
  my_mock.should_receive (: sym) .at_most (: dos veces)
  my_mock.should_receive (: sym) .at_most (n) .times
  my_mock.should_receive (: sym) .any_number_of_times

También funciona para rspec 2.5.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top