鉴于以下Rails 4.2控制器:
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
当使用RSpec 3时,我尝试调用此index
操作并期望状态为401,我的状态始终为200.
我获得401的唯一时刻是用index
替换head 401
操作内容,但我想回复错误401并构建一个像{{1 }}
为什么忽略{ error: 401, message: 'Unauthorised' }
?
答案 0 :(得分:13)
使用错误代码而不是它的名称:
render json: {}, status: 401
答案 1 :(得分:5)
我不得不用以下内容替换我的控制器:
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
self.status = :unauthorized
self.response_body = { error: 'Access denied' }.to_json
end
end
end
end
使用render
并不妨碍执行被调用的操作。使用head :unauthorized
返回正确的状态代码,但空白正文。
self.status
和self.response_body
完美无缺。
你可以看一下我在这里遇到此问题的宝石源代码:https://github.com/YourCursus/fortress
答案 2 :(得分:1)
将unauthorised
替换为unauthorized