我正在尝试为需要身份验证的一些RSpec请求设置标头。标题是ACCESS_TOKEN
。无论我如何设置标题,它都不会被设置。我知道该应用程序的作品,因为我可以手动测试它,我只是不能让rspec测试工作。请参阅完整源代码&此处测试此问题:https://github.com/lightswitch05/rspec-set-header-example在RSpec 3请求中设置标题
由于身份验证用于大多数请求规范,因此我创建了支持帮助程序模块来检索访问令牌并将其设置在标题中。下面是如何我想设置页眉的总结,看到的一切,我已经试过在使用这个助手,并应工作full source
# my_app/spec/support/session_helper.rb
module SessionHelper
def retrieve_access_token
post api_v1_session_path({email: '[email protected]', password: 'poor_password'})
expect(response.response_code).to eq 201
expect(response.body).to match(/"access_token":".{20}"/)
parsed = JSON(response.body)
token = parsed['access_token']['access_token']
@request.headers['HTTP_ACCESS_TOKEN'] = token
end
end
一个例子要求规范,但总是失败,因为头从来没有被设置:
# my_app/spec/requests/posts_spec.rb
# ...
context "create" do
it "creates a post" do
retrieve_access_token
post = FactoryGirl.build(:post)
post api_v1_posts_path(
post: {
title: post.title,
content: post.content
}
)
expect(response.body).to include('"id":')
expect(response.body).to include('"title":"' + post.title + '"')
expect(response.body).to include('"content":"' + post.content + '"')
expect(response.response_code).to eq 201
end
end
我知道我可以手动设置头中的个体get
和post
请求 - 但是,这并不是API级权限的维护的解决方案。想象一下,如果标题名称稍有改变,则必须更改每个测试。
我对Solution#1进行了一些稍微更改:在rails_helper中,我将辅助函数包含为控制器类型。我必须在我的助手中添加这个标记,就像这个request.headers ['HTTP_AUTH_TOKEN'] = Rails.application.secrets.default_api_token – 2015-07-23 14:10:44
对于任何想要使用RSpec 3和Rails 4添加标题的人,只需调用'request.headers .merge!({'X-MYHEADER':'value'})'在'get','post'等之前的任何位置添加标题到控制器规范的请求中。有关示例,请参阅此要点https://gist.github.com/quadrolls/9203f924f934398f6992162bbbcb1a0c – Squadrons 2016-04-07 20:36:26