【问题标题】:Reducing network requests for RSpec controller specs, how to set headers减少对 RSpec 控制器规范的网络请求,如何设置标头
【发布时间】:2018-08-10 23:06:26
【问题描述】:

我正在运行 Rails 5 JSON API 服务器。我编写了一些控制器规范,但我注意到它们需要很长时间才能运行,我正在寻找一种优化方法。

我读过的一种方法是通过在 before(:all)before(:context) 块中进行 GET/POST 请求来减少网络请求的数量,然后让后续的 it 语句测试来自的响应单个网络请求。

我遇到的一个问题是,在我的before(:context) 块中,我似乎无权修改请求标头。例如,目前我的代码如下所示:

before(:each) do
  add_authorization_header
  get :index
end

add_authorization_header 的样子:

request.headers['Authorization'] =
"Token token=#{some_authorization_token)}"

但是当我偶然将before(:each) 转换为before(:context) 时,我收到以下错误:

NoMethodError: undefined method `headers' for nil:NilClass

有没有办法在 before(:context) 块内设置请求标头?

【问题讨论】:

    标签: ruby-on-rails rspec ruby-on-rails-5


    【解决方案1】:

    我认为您无权访问示例组中的请求对象。试试:

    before(:context)
      headers = { "Authorization" => "Token token=#{some_authorization_token)}" }
      get :index, params: {}, headers: headers
    end
    

    【讨论】:

    • 更好的是,让headers 成为可以在个人上下文中覆盖的变量。
    • 这似乎不起作用。我收到以下错误:ArgumentError: unknown keyword: headers
    猜你喜欢
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多