首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RSpec:设置请求头

RSpec:设置请求头
EN

Stack Overflow用户
提问于 2016-02-18 19:38:13
回答 2查看 3.7K关注 0票数 3

我试图在我的规范中使用ActionDispatch request助手方法设置重要的标题:

代码语言:javascript
复制
RSpec.describe API::V1::FoosController, type: :request do
  describe 'GET #index' do
    context 'common case' do
      request.env.merge!({'HTTP_FOO': 'FOO'})
      get api_foos_path, {}, {Accept: Mime::JSON}
    end
  end
end

但是,当涉及到控制器时,这个头(以及通常使用request设置的任何头)消失了:

代码语言:javascript
复制
class API::V1::FoosController < ApplicationController
  respond_to :json, :xml

  def index
    request.env.has_key? 'HTTP_FOO' # false
    respond_with serialize_models(Foo.all)
  end
  # ...
end

为什么会发生这种情况,我如何正确地设置它?使用request.header@request.header设置标头也是如此。

P.S.:我知道我可以将headers设置为Rack::Test::Methods助手的第三个参数,但我不想违反DRY -我只想在那里定义Mime格式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-18 22:02:22

请这样试一试:

代码语言:javascript
复制
request.env['HTTP_FOO_HEADER'] = 'foo header'
票数 6
EN

Stack Overflow用户

发布于 2016-02-18 19:41:37

使用controller.request.headers

代码语言:javascript
复制
controller.request.headers['HTTP_FOO'] = 'FOO'

我可以验证这种方法在Rails 4.2.5中是否有效,因为这是从实际代码中直接解除的。

我们的测试看起来如下:

代码语言:javascript
复制
describe SomeController, type: :controller do
  let(:current_user) { create :user }

  before :each do
    controller.request.headers['Authorization'] = "APIKey #{current_usser.api_key}"
  end
end

我们的ApplicationController看起来(或多或少)是这样的:

代码语言:javascript
复制
before_action :authenticate_request

def authenticate_request
  key = request.headers['Authorization']
  user = User.find_by(api_key: key)
  # raise AuthenticationError unless user, etc etc
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35490874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档