我正在做Michael Hartl的Ruby on Rails教程,当我运行rails test
时,我一直得到这个失败的测试
Running via Spring preloader in process 68226
Started with run options --seed 29383
FAIL["test_login_with_remembering", UsersLoginTest, 1.3566609998233616]
test_login_with_remembering#UsersLoginTest (1.36s)
Expected: "s0MI7G1uhFcqNFBgQaH9tg"
Actual: nil
test/integration/users_login_test.rb:45:in `block in <class:UsersLoginTest>'
44/44: [===============================================================================] 100% Time: 00:00:01, Time: 00:00:01
Finished in 1.36854s
44 tests, 206 assertions, 1 failures, 0 errors, 0 skips
这是我的代码:
def setup
@user = users(:michael)
end
test "login with remembering" do
log_in_as(@user, remember_me: '1')
@user.reload
assert_not_nil cookies['remember_token']
assert_equal cookies['remember_token'], @user.remember_token
end
这在我的users.yml文件中:
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
admin: true
activated: true
activated_at: <%= Time.zone.now %>
在测试时,@user.remember_token
似乎没有值。
从持久化重新加载对象的那一刻,除非持久化,否则应用到它的每一个更改都会丢失。
因此,在您的情况下,在测试预期值之前,您必须保持或不重新加载。
test "login with remembering" do
log_in_as(@user, remember_me: '1')
# @user.reload # skip this
assert_not_nil cookies['remember_token']
assert_equal cookies['remember_token'], @user.remember_token
end