2009-08-25 12 views
100

tengo esto en mi pruebaCómo decir "should_receive" más veces en RSpec

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

pero cuando el objeto recibir esa llamada método de dos tiempos, que 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) 

Respuesta

209

Esto no está actualizado. Por favor marque la respuesta de Uri continuación

de 2 veces:

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

por exactamente n veces:

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

por lo 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 cuenta

espero que ayude =)

+3

Parece que esto no funciona con 'any_instance'? –

+0

@JaredBeck ¿por qué? –

+0

@YoLudke No sé –

0

should_receive, en contraposición a any_instance, espera que la clase recibe el mensaje el número de veces especificado.

any_instance Por otro lado, generalmente se utiliza para cortar un método.

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

+1

Drenmi. Agradezco el tiempo que ha dedicado para agregar algunas comas a una publicación que agregué hace casi un año ... No parecía que hubiera ningún cambio en el aspecto técnico de la respuesta ... ¿Por qué bajaría? votame por esto ...? – amnsan

38

El nuevo expect sintaxis del rspec se verá así:

de 2 veces:

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

por exactamente n veces:

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

por lo menos n veces:

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

La sintaxis 'have_received' también funciona. 'expect (Project) .to have_received (: find) .exactly (n) .times' etc. –

0

@JaredBeck señaló. La solución no funcionó para mí en any_instance llamada.

Para cualquier instancia terminé usando stub en lugar de should_receive.

Project.any_instance.stub(:some_method).and_return("value") 

Esto funcionará para cualquier no. de veces sin embargo.

+0

http://stackoverflow.com/questions/24595203/rspec-any-instance-deprecation-how-to-fix-it –

Cuestiones relacionadas