【问题标题】:Setting http headers RSpec 2.4 / Rails 3设置 http 标头 RSpec 2.4 / Rails 3
【发布时间】:2011-06-24 07:01:57
【问题描述】:

我开始使用 RSpec。我有一个新的 rails 3 应用程序,它使用 HTTP_ACCEPT_HEADER 或请求 2 字母子域来设置应用程序语言并相应地重定向。我正在使用 Cucumber 成功测试我的重定向代码。

现在我想编写我的控制器规格,我需要在测试之前设置请求子域。

在我的黄瓜步骤中,我可以指定:

header 'HTTP_HOST', 'es.mysite.local'
visit '/'

但是当我尝试在规范文件中执行此操作时

header 'HTTP_HOST', 'es.mysite.local'
get 'index'

我收到此错误:

Failure/Error: header 'HTTP_HOST', "es.mysite.local"
 LoadError:
   no such file to load -- action_controller/integration

关于如何解决这个问题的任何线索?

【问题讨论】:

    标签: ruby-on-rails rspec cucumber webrat


    【解决方案1】:

    试试这个:

    request.env['HTTP_HOST'] = 'es.mysite.local'
    get 'index'
    

    【讨论】:

    • 非常感谢!我已经尝试过了,但我现在意识到另一个代码示例首先到达了我的调试点。
    • 谢谢!它现在适用于 Rails 3.0.7,并且避免我将带有子域的完整 url 放在任何地方。
    【解决方案2】:

    前面的答案是正确的,一般情况下header的名字应该全部大写,以HTTP_为前缀,下划线分隔。例如,“If-Modified-Since”标头可以设置为:

    request.env['HTTP_IF_MODIFIED_SINCE'] = Time.now.httpdate
    

    【讨论】:

      【解决方案3】:

      也可以在 rspec 中为每个请求设置一个 HTTP 标头。在 RSpec.configure do |config| 块内添加到您的 spec_helper:

      config.before(:each) do |x|
          x.request.env['HTTP_ACCEPT_LANGUAGE'] = 'de-CH,de;q=0.8,en;q=0.6'
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多