在请求规范(request spec)执行请求之前,如何设置请求头(request headers)?
我正在使用Rails将控制器规范(controller specs)转移到请求规范中。我遇到的一个问题是我无法访问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 spec)中,request
对象是不可用的。
如果我尝试:
before { sign_in(user) }
it { post "/api/endpoint", params }
我的帮助方法中的request
是nil
。
我知道我可以这样做:
it { post "/api/endpoint", {"HTTP_AUTHORIZATION" => ... } }
但是与控制器规范相比,这似乎是很多杂乱的内容。
我尝试使用这个答案建议的ActionDispatch::TestRequest::DEFAULT_ENV
,但它也没有起作用(我得到了401
)。