Sto testando una funzione su uno dei miei modelli che genera errori specifici. La funzione simile a questa:Rails ActiveSupport: come affermare che viene generato un errore?
def merge(release_to_delete)
raise "Can't merge a release with itself!" if(self.id == release_to_delete.id)
raise "Can only merge releases by the same artist" if(self.artist != release_to_delete.artist )
#actual merge code here
end
Ora voglio fare un'asserzione che quando chiamo questa funzione con un parametro che determina ciascuna di queste eccezioni, che le eccezioni in realtà vengono gettati. Stavo guardando la documentazione di ActiveSupport, ma non stavo trovando nulla di promettente. Qualche idea?
Grazie! Ho dovuto usare "RuntimeError" invece di eccezione però, in questo modo: assert_raise (RuntimeError) {artist1.merge (artist1)} Questa guida è stata estremamente utile: http://guides.rubyonrails.org/testing.html – spilliton
@spilliton: Questo perché l'interprete Ruby tratta il codice sopra come "assert_raise (Exception() {whatever.merge})", cioè cerca un metodo chiamato "Exception" che viene chiamato con il blocco dato. L'aggiunta delle parentesi risolve tale ambiguità. (È già stata corretta la risposta) –
In rspec 3, usare 'expect {whatever.merge} .to a raise_error' (http://www.relishapp.com/rspec/rspec-expectations/v/3-1/docs/built- in-matchers/raise-error-matcher) –