Ich habe eine sehr harte Zeit Simulation des Fehlschlags einer Zerstörungsmethode in meinem Controller.RSpec: Wie simuliere ich Fehler # Destroy korrekt
Mein Controller zerstören sieht wie folgt aus:
def destroy
project = Project.find(params[:id])
project.destroy
if project.destroyed?
render json: {
project: nil,
message: "The project was successfully deleted"
}
else
render json: {
message: "Could not delete project",
}, status: :unprocessable_entity
end
end
Ich versuche, die json im else-Block in meinem Test zu machen, aber nicht erledigen. Bisher ist die speziellen Test sieht wie folgt aus:
describe "DELETE #destroy" do
let!(:project) { create(:project, :open) }
context "when invalid" do
it "returns an error if the project was not deleted" do
expect(Project).to receive(:find).with(project.id.to_s).and_call_original
expect(project).to receive(:destroy).and_return(false)
delete :destroy, id: project
end
end
end
Der Test liefert entweder den ‚Happy Path‘ oder gibt mir Fehler. Zur Zeit:
Failure/Error: expect(project).to receive(:destroy).and_return(false)
(#<Project:0x007f87cf5d46a8>).destroy(*(any args))
expected: 1 time with any arguments
received: 0 times with any arguments
Wenn jemand mich in der richtigen Richtung zeigen könnte, und erklären, wie ich ein 422 simulieren kann, wäre ich sehr dankbar!
Vielen Dank für Ihre schnelle Antwort normalerweise tun! Das expect (project) .to received (: destroy) löst einen undefinierten Methodenfehler aus. Wenn ich den response.body auf die Konsole drucke, sehe ich immer noch den "Happy Path" -Ergebnis. Wie funktioniert das allow() und return (false)? – Iris
Sorry @Iris das sollte 'have_received' sein. Im Wesentlichen ist es in [Rspecs Mocks] (https://relishapp.com/rspec/rspec-mocks/v/3-4/docs/basics/allowing-messages). Im Grunde sagt es nur rspec, dass das Projekt einen Aufruf zum "Zerstören" erhält und zurückgibt, was wir wollen, nämlich "falsch". Sie möchten weitere Aussagen hinzufügen, um die Nachricht/den Status zu überprüfen. –
Danke @ j-dexx. Dargestellt und versucht es, aber jetzt bekomme ich wieder das 'Fehler/Fehler: expect (project) .to have_received (: zerstören) (#). Zerstören (* (beliebige Argumente)) erwartet: 1 Zeit mit irgendwelchen Argumenten erhalten: 0 mal mit beliebigen Argumenten's nochmal :( –
Iris