用户登录测试中的未定义方法

时间:2018-02-27 14:04:04

标签: ruby-on-rails ruby-on-rails-5

我刚刚完成了https://www.railstutorial.org/book/basic_login的第8章,该网站已在线(请点击此处:https://peaceful-river-79951.herokuapp.com/)。唯一的问题是在最后的测试中:

test "login with valid information followed by logout" do
  get login_path
  post login_path, params: { session: { email:    @user.email,
                                        password: 'password' } }
  assert is_logged_in?
  assert_redirected_to @user
  follow_redirect!
  assert_template 'users/show'
  assert_select "a[href=?]", login_path, count: 0
  assert_select "a[href=?]", logout_path
  assert_select "a[href=?]", user_path(@user)
  delete logout_path
  assert_not is_logged_in?
  assert_redirected_to root_url
  follow_redirect!
  assert_select "a[href=?]", login_path
  assert_select "a[href=?]", logout_path,      count: 0
  assert_select "a[href=?]", user_path(@user), count: 0
end

错误: UsersLoginTest#test_login_with_valid_information_followed_by_logout: NoMethodError:'

中未定义的方法email' for nil:NilClass test/integration/users_login_test.rb:17:in阻止

据我了解,@ user比使用电子邮件方法更成问题。 @user不应该是测试成功的零。我该如何解决这个问题?

一切都在Github上:https://github.com/kart-able/sample_app

1 个答案:

答案 0 :(得分:0)

您缺少setup任务,请参阅https://www.railstutorial.org/book/basic_login中的清单8.23,其中包含

 def setup
    @user = users(:michael)
 end