2012-07-03 8 views
9

Tuve un caso de rspec realmente extraño. Traté de probar si mi función maneja la excepción correctamente. Y la siguiente es mi código:RSpec para should_receive y should_not_receive pasaron por la excepción

en User.rb:

def welcome_user 
     begin 
     send_welcome_mail(self) 
     rescue Exception => exception 
     ErrorMessage.add(exception, user_id: self.id) 
     end 
    end 
end 

en user_spec.rb

it "adds to error message if an exception is thrown" do 
    mock_user = User.new 
    mock_user.stub(:send_welcome_mail).and_raise(Exception) 
    ErrorMessage.should_receive(:add) 
    mock_user.welcome_user 
end 

pasó la prueba, pero cuando cambio ErrorMessage.should_receive(:add)-ErrorMessage.should_not_receive(:add), También pasaron, alguna idea?

+0

me he encontrado una prueba con lo mismo que sucede, pero se va con rspec 2.11. Vea si eso hace una diferencia para usted – prusswan

Respuesta

5

Dado que rspec 2.11 expuso una de mis pruebas para exhibir tal "anormalidad", decidí plantear el problema en github. Es posible que después de la discusión en https://github.com/rspec/rspec-mocks/issues/164

Resumen: any_instance.should_not_receive no está definido, evitar

+1

Finalmente logré resolver este problema, resulta que el método que apagué con la excepción también se llamó en algún lugar antes en el flujo lógico, que era el problema principal del problema. –

4

Lo que se puede tratar de usar en su lugar es .should_receive en combinación con .never:

ErrorMessage.should_receive(:add).never 
Cuestiones relacionadas