【问题标题】:Why is the rack env hash empty in Rails test environment?为什么 Rails 测试环境中的 rack env hash 为空?
【发布时间】:2012-02-17 21:52:25
【问题描述】:

在我的 Rails 应用程序中,我正在我的一个控制器操作中访问 env 哈希。

类似的东西:

def my_before_filter
  env['some.key'] = "Something or other"
end

这非常适合我的要求。

如果我在测试环境中启动我的 Rails 应用程序,并访问如下操作:

# /users in UsersController#index
def index
  puts env.inspect
end

然后将env hash的内容按预期输出到控制台。

当我从 RSPec 示例中获取此操作时,输出是一个空哈希?

it 'should get the index action' do
  get :index
end

.....{}.... # rspec output

为什么 env 哈希是空的?

我已经构建了一个dummy rails 应用来展示这个

【问题讨论】:

  • 我认为你应该在“开发”环境中运行它。
  • 我通常在开发环境中运行它。 env 散列存在于开发中。我想提一下,我在“测试”模式下手动启动服务器时看到的行为与通过测试套件创建请求时看到的行为不同。

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


【解决方案1】:

使用

request.env

而不仅仅是控制器代码中的 env。

例如/

def index
  puts request.env.inspect
end

希望有帮助吗?

顺便说一句:在使用您的 github 存储库时,您需要删除 public/index.html 以在运行服务器时让您的根路由正常工作。

【讨论】:

  • 嗨 - 感谢您的反馈......这仍然不能回答为什么 env 哈希不能直接在控制器中使用? PS - 更新了回购
  • 这是因为 rspec-rails 绕过了 ActionController::Metal 调度方法
猜你喜欢
  • 1970-01-01
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多