我正在尝试为一些需要身份验证的 RSpec 请求设置标头。标题是ACCESS_TOKEN
. 无论我如何尝试设置标题,它都不会被设置。我知道该应用程序有效,因为我可以手动测试它,我只是无法让 rspec 测试工作。在此处查看此问题的完整源代码和测试:https ://github.com/lightswitch05/rspec-set-header-example
由于在我的大多数请求规范中都使用了身份验证,因此我创建了支持帮助程序模块来检索访问令牌并将其设置在标头中。下面是我如何尝试设置标题的摘要,请查看我在完整源代码中尝试过的所有内容
# my_app/spec/support/session_helper.rb
module SessionHelper
def retrieve_access_token
post api_v1_session_path({email: 'test@example.com', 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 范围授权的可维护解决方案。想象一下,如果标题名称略有变化,则必须更改每个测试。