会话变量在全局之前不可用(:each,:type =>:controller)

时间:2011-01-14 09:49:12

标签: ruby-on-rails-3 rspec rspec2

我正在重构一些规格,在控制器规格中我有before(:each)设置会话所需的东西,想避免重复并为每个控制器规范设置全局初始设置

我之前的过滤器是......

config.before(:each, :type => :controller) do

  #... 

  session[:current_user] = @user
  session[:instance] = @instance

  #...

end

@user@instance也在before(:each)中设置 我刚刚隐藏它们以便于阅读

运行控制器测试时出现以下错误

undefined method `session' for nil:NilClass

我希望回调前的全局回调与各个测试中的回调相同,但我想它们可能是在rails环境初始化之前加载的?

由于

2 个答案:

答案 0 :(得分:1)

使用controller.stub!(:session, { :current_user => @user, :instance => @instance })

答案 1 :(得分:0)

我认为这更多地与Ruby和块(它们是闭包)有关。

传递给before的块绑定到创建它的上下文,session在该上下文中不可用。