Eine Antwort mit status unberechtigte (401) mit 4 Schienen
Angesichts der folgenden Rails 4.2 controller:
class Api::UsersController < ApplicationController
def index
respond_to do |format|
format.html do
flash[:error] = 'Access denied'
redirect_to root_url
end
format.json do
render json: {}, status: :unauthorised
end
end
end
end
Wenn, mit RSpec 3, ich versuchen, rufen Sie diese index
Aktion und erwarten, dass die status-401 habe ich immer den status 200.
Der einzige moment, wo ich die 401 ist der Ersatz der index
Aktion Inhalte mit head 401
aber eingehen möchte ich mit dem Fehler 401 und bauen auch einen "schönen" Körper wie { error: 401, message: 'Unauthorised' }
.
Warum ist die status: :unauthorised
ignoriert ?
- Ich baute einen quick-test-app und deine Skillung geht. Es dürfte ein weiterer
before_filter
oderbefore_action
wie @shoji schlägt. - Ich habe das exakt gleiche problem mit Rails-4.2.0-und Rspec-rails 3.3
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fehler-code anstelle von name:
render json: {}, status: 401
redirect_to(root_path, status: 401)
Musste ich ersetzen, meine controller mit diesem folgenden:
Mit
render
ist nicht die Verhinderung der sogenannten Aktion ausgeführt werden soll. Mithead :unauthorized
ist wieder der richtige status-code aber mit einem leeren Körper.Mit
self.status
undself.response_body
es funktioniert perfekt.Können Sie sehen, haben Sie einen Blick auf den Quellcode, mein Juwel, wo hatte ich dieses Problem hier: https://github.com/YourCursus/fortress
Ersetzen
unauthorised
durchunauthorized
unauthorized
.get :index, format: :json
und dannexpect(response.status).to eql(401)
aber ich habe die ganze Zeit einen 200-code.before_filter
oderbefore_action
imApplicationController
?redirect_to
, so dass die controller-action wird verhindert, während mit JSON habe ich denstatus: 401
aber nach dem in der controller-Aktion ist es den Wechsel zurück zu200
denke ich.head
Methode, ich sah Ihre mithilfeself.status =
undself.response_body =
. Ich ersetzte meinerender
undhead
mit diesem, und es funktioniert. Ich habe die richtige Körper-und status-code.