我只是找不到一种简单的方法来轻松地为每个请求添加授权标头? 我错过了什么吗? 这似乎应该是针对使用授权标头进行身份验证的 API 的请求规范的标准用例?
rspec-rails
是 Rails 测试助手周围的一个薄垫片,所以如果他们没有添加这个功能,我们也没有
没有办法“自动”设置它。 正如 Jon 所说,大部分rspec-rails
是一个瘦包装器,在这种情况下,请求规范是围绕Rails 集成测试的包装器。
基于Rails API ,头文件并不是真正继承自任何东西。 每次都必须唯一地设置它们。 这就是请求的工作方式,客户端每次发出请求时都必须发送标头,这由客户端来管理。
IMO,API 的请求规范应该从消费者的角度记录 API 交互的工作方式。 表明需要始终发送标头以及那些标头是很好的文档。
如果您想自己实现这一点,有几个选择:
ruby
def get(path, parameters = nil, headers_or_env = nil)
headers_or_env ||= { 'some' => 'defaults' }
super
end
``` 红宝石
RSpec.describe“一些API端点”做
let(:auth_headers) {
{ 'HTTP-AUTHORIZATION' => 'Token token="pancakes"' }
}
def request_widgets
get api_widgets, '', auth_headers
response
end
it "gets the widgets" do
expect(request_widgets).to have_http_status(:success)
end
结尾
``
就请求身份验证而言,授权标头与 cookie 标头几乎没有区别。 在请求和控制器规范中,我们都可以访问会话实例,从而使我们能够设置“cookie”标头。
对 API 的请求规范可以记录一组特定测试中的基础知识,包括身份验证。 对于重点是规范经过身份验证的响应的每个规范,这应该不是必需的。
同样,这里的愿望与每个人已经使用的标准 Web 浏览器控制器/请求规范没有什么不同。
@paulwalker我们并不是说这是一个不合理的请求,只是您将其用于错误的项目,请与 rails 团队打开此功能请求
谢谢@JonRowe ,很公平。
最有用的评论
没有办法“自动”设置它。 正如 Jon 所说,大部分
rspec-rails
是一个瘦包装器,在这种情况下,请求规范是围绕Rails 集成测试的包装器。基于Rails API ,头文件并不是真正继承自任何东西。 每次都必须唯一地设置它们。 这就是请求的工作方式,客户端每次发出请求时都必须发送标头,这由客户端来管理。
IMO,API 的请求规范应该从消费者的角度记录 API 交互的工作方式。 表明需要始终发送标头以及那些标头是很好的文档。
如果您想自己实现这一点,有几个选择:
ruby def get(path, parameters = nil, headers_or_env = nil) headers_or_env ||= { 'some' => 'defaults' } super end
``` 红宝石
RSpec.describe“一些API端点”做
结尾
``