【问题标题】:Undefined local variable or method 'session' in model test模型测试中未定义的局部变量或方法“会话”
【发布时间】:2015-10-02 10:51:09
【问题描述】:

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

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

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

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。这里有什么问题?

【问题讨论】:

    标签: ruby-on-rails ruby session cookies


    【解决方案1】:

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

    【讨论】:

    • 啊,我明白了,但是这段代码在测试套件中......这仍然适用吗?此外,我还调用了test_helper.rb 文件中的会话哈希。 (参考我对主要问题的回复评论)
    • 是的。 在控制器和视图以及控制器和视图测试中可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多