2012-07-03 7 views
9

Ho avuto uno scenario caso rspec davvero strano. Ho provato a verificare se la mia funzione gestisce correttamente l'eccezione. E il seguente è il mio codice:RSpec per should_receive e should_not_receive entrambi passati per Exception

in User.rb:

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

in 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 

Il test è stato superato, ma quando cambio ErrorMessage.should_receive(:add)-ErrorMessage.should_not_receive(:add), passò anche, qualche intuizione?

+0

ho incontrato un test con la stessa cosa, ma va via con rspec 2.11. Vedi se questo fa la differenza per te – prusswan

risposta

5

Poiché rspec 2.11 ha esposto uno dei miei test per mostrare tale "anomalia", ho deciso di sollevare il problema su github. Si può in seguito alla discussione in https://github.com/rspec/rspec-mocks/issues/164

Sommario: any_instance.should_not_receive è indefinito, evitare

+1

Alla fine sono riuscito a risolvere questo problema, si scopre che il metodo che ho eliminato con eccezione è stato anche chiamato da qualche parte prima nel flusso logico, che era il problema principale del problema. –

4

Che cosa si può provare ad usare invece è .should_receive in combinazione con .never:

ErrorMessage.should_receive(:add).never 
Problemi correlati