Cómo decir "should_receive" más veces en RSpec


112

Tengo esto en mi prueba

Project.should_receive(:find).with(@project).and_return(@project)

pero cuando el objeto recibe esa llamada al método dos veces, tengo que hacer

Project.should_receive(:find).with(@project).and_return(@project)
Project.should_receive(:find).with(@project).and_return(@project)

¿Hay alguna forma de decir algo como

Project.should_receive(:find).with(@project).and_return(@project).times(2)

Respuestas:


214

Esto está desactualizado. Por favor verifique la respuesta de Uri a continuación.

por 2 veces:

Project.should_receive(:find).twice.with(@project).and_return(@project)

exactamente n veces:

Project.should_receive(:find).exactly(n).times.with(@project).and_return(@project)

por al menos n veces:

Project.should_receive(:msg).at_least(n).times.with(@project).and_return(@project)

más detalles en https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts bajo Recibir recuentos

Espero que ayude =)


3
¿Parece que tal vez esto no funciona any_instance?
Jared Beck

@YoLudke No lo sé
Jared Beck

2
Debería usar la nueva sintaxis mencionada en la respuesta de Uri .
theblang

61

La nueva expectsintaxis de rspec se verá así:

por 2 veces:

expect(Project).to receive(:find).twice.with(@project).and_return(@project)

exactamente n veces:

expect(Project).to receive(:find).exactly(n).times.with(@project).and_return(@project)

por al menos n veces:

expect(Project).to receive(:msg).at_least(n).times.with(@project).and_return(@project)

1
La have_receivedsintaxis también funciona. expect(Project).to have_received(:find).exactly(n).timesetc.
David Tuite


0

should_receive, a diferencia de any_instance, espera que la clase reciba el mensaje el número especificado de veces.

any_instance por otro lado, generalmente se usa para cortar un método.

Entonces, el primer caso es una expectativa que nos gustaría probar, mientras que el segundo es pasar de un método a la siguiente línea para que podamos seguir adelante.


1
Drenmi, agradezco el tiempo que se ha tomado para agregar algunas comas a una publicación que había agregado hace casi un año ... No parecía que hubiera ningún cambio en el aspecto técnico de la respuesta ... ¿Por qué votaría en contra yo por esto ...?
amnsan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.