为什么Rails测试环境中的机架env哈希是空的?

bod*_*ous 7 ruby rack ruby-on-rails rspec-rails

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

有点像:

def my_before_filter
  env['some.key'] = "Something or other"
end
Run Code Online (Sandbox Code Playgroud)

这对我的要求非常有用.

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

# /users in UsersController#index
def index
  puts env.inspect
end
Run Code Online (Sandbox Code Playgroud)

然后,env哈希的内容按预期输出到控制台.

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

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

.....{}.... # rspec output
Run Code Online (Sandbox Code Playgroud)

为什么env哈希是空的?

我已经构建了一个虚拟轨道应用来展示这一点

gef*_*gef 10

使用

request.env
Run Code Online (Sandbox Code Playgroud)

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

例如/

def index
  puts request.env.inspect
end
Run Code Online (Sandbox Code Playgroud)

希望有帮助吗?

另请注意:在使用github repo时,在运行服务器时,需要删除public/index.html以使根路由起作用.

  • 这是因为rspec-rails绕过了ActionController :: Metal调度方法 (3认同)