I wie unten eine Löschfunktion in einem meiner Controller haben:einen rspec Test für Löschaktion in Controller Schreiben
before_action :set_form, only: [:show, :edit, :update, :destroy]
def destroy
if @form.destroy
render json: @form, status: :ok
else
render json: @form.errors, status: :not_found
end
end
private
def set_form
@form = Form.find(params[:id])
end
end
habe ich zwei Fragen:
1) Ich bin der Rückkehr 404, wenn löschen wird nicht korrekt ausgeführt. Ist das ein vernünftiger Statuscode? Ich habe den gesamten 4XX-Statuscode untersucht, und das war sehr sinnvoll.
2) Ich bin mir nicht sicher, wie ich einen Test für render json: @form.errors, status: :not_found
schreiben werde.
Unten ist das, was ich versucht:
context "Cannot delete the model" do
it "responds successfully with an HTTP 404 status code" do
delete :destroy, id: 100000
expect(response).to have_http_status(404)
end
end
Das Problem ist, dass ich eine Fehlermeldung erhalten dass ActiveRecord::RecordNotFound:Couldn't find Visa with 'id'=10000
statt delete
Aktion tatsächlich ausfällt. Wie verspotten Sie, dass delete
Aktion fehlschlägt?
findet find_by immer noch 'ActiveRecord :: RecordNotFound'? – JoHksi
Nein, 'find' wird ausgelöst,' find_by' gibt 'nil' zurück. –
yep, was @ MichaelKohl sagt. Michaels Antwort ist gut, aber Sie müssen auf die Möglichkeit vorbereitet sein, dass in den meisten Ihrer CRUD-Methoden ein Null-Objekt empfangen wird: show', ': edit',': update' – SteveTurczyn