【发布时间】:2014-04-03 23:32:12
【问题描述】:
如何在根据请求规范执行请求之前设置请求标头?
我正在使用 Rails 移动控制器规范以在我的 API 上请求规范。我坚持的一件事是我无法访问 request 对象来允许请求。
根据我的控制器规格,我可以访问我创建的一种方法,该方法为特定用户签名:
def sign_in(user)
token = user.api_keys.first.token
# note the request object being used in the next line
request.env["HTTP_AUTHORIZATION"] = ActionController::HttpAuthentication::Token.encode_credentials(token)
end
这在控制器规格上运行良好,我可以安全地这样做:
before { sign_in(user) }
it { post :endpoint, params }
但在请求规范中,request 对象不可用。
如果我尝试:
before { sign_in(user) }
it { post "/api/endpoint", params }
我在我的辅助方法中得到request nil。
我知道我能做到:
it { post "/api/endpoint", {"HTTP_AUTHORIZATION" => ... } }
但这在规范中似乎很混乱,特别是与控制器规范相比。
按照this answer 的建议,我已尝试使用ActionDispatch::TestRequest::DEFAULT_ENV,但也没有用(我得到了401)。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 rspec rspec-rails