ho scritto questo spec in products_controller_spec.rb, che ha lo scopo di testare un reindirizzamento quando distruggere viene chiamato su un record inesistente:RecordNotFound sollevato quando si utilizza find_by_id per ottenere il record inesistente in RSpec
it "deleting a non-existent product should redirect to the user's profile page with a flash error" do
delete :destroy, {:id => 9999}
response.should redirect_to "/profile"
flash[:error].should == I18n.t(:slideshow_was_not_deleted)
end
Ecco l'azione di controllo in products_controller.rb:
Ora, non mi aspettavo le specifiche di passare prima volta, ma non capisco il motivo per cui è in mancanza con questo:
Failure/Error: delete :destroy, {:id => 9999}
ActiveRecord::RecordNotFound:
Couldn't find Product with id=9999
Avevo l'impressione che #find_by_id non restituisse l'errore RecordNotFound su un record inesistente. Allora perché ne sto prendendo uno? Grazie in anticipo!
Quale versione di Rails usi? Questo 'find_by_id' funziona bene qui con Rails 3.2.3. (restituendo nil invece di aumentare RecordNotFound) – Deradon
3.2.2 qui. Dovrei aggiungere che find_by_id funziona nel browser. Sto ottenendo RecordNotFound solo nei risultati delle specifiche. – theflyingbrush
- In realtà, appena provato nel browser con un'azione di visualizzazione su un record inesistente e ottenuto un recordNotFound. Sono andato via quando ho commentato l'autenticazione CanCan nel controller. Sembra che CanCan stia lanciando il RnF – theflyingbrush