模型测试

时间:2015-07-14 00:43:43

标签: ruby-on-rails ruby session cookies

我正在创建一个Ruby on Rails应用程序,我正在尝试运行涉及我的User模型的测试,以查看“记住我”功能是否有效。我使用Rails的内置cookies哈希来存储cookie,使用session哈希来存储当前会话。我运行了各种测试(集成,模型和控制器),我使用session变量,但由于某种原因,在这种特殊情况下它不被识别。

NameError: undefined local variable or method `session' for #<UserTest:0x0000000658b5c8>

错误发生在以下else方法的log_in_as块中:

test_helper.rb

...

def log_in_as(user, options = {})
  password = options[:password] || 'password'
  remember_me = options[:remember_me] || '1'

  if integration_test?
    post login_path, session: { email: user.email, password: password, remember_me: remember_me }
  else
    session[:user_id] = user.id
  end
end

我在用户测试中调用log_in_as;这两项测试都失败了。

user_test.rb

require 'test_helper'
...
test "login with remembering" do
  log_in_as(@user, remember_me: '1')
  assert_not_nil cookies['remember_token']
end

test "login without remembering" do
  log_in_as(@user, remember_me: '0')
  assert_nil cookies['remember_token']
end
...

当我从帮助程序中删除该行代码时,会抛出一个错误,指出cookies无法识别。这是什么问题?

1 个答案:

答案 0 :(得分:6)

session哈希isn't available in models, only in controllers and views以及控制器和视图测试。