我正在学习https://www.railstutorial.org/的第9章,在进行集成测试时遇到了麻烦。
测试看起来像这样:
class UsersLoginTest < ActionDispatch::IntegrationTest
...
test "login with remembering" do
log_in_as(@user, remember_me: '1')
assert_not_empty cookies['remember_token']
end
...
end对log_in_as的调用是添加到我的test_helper中的ActionDispatch::IntegrationTest的函数,并且看起来像预期的那样工作。此函数的副作用之一是设置了一个名为'remember_token‘的cookie。但是,断言失败,并显示以下消息:
FAIL["test_login_with_remembering", UsersLoginTest, 14.115229932998773]
test_login_with_remembering#UsersLoginTest (14.12s)
Expected nil (NilClass) to respond to #empty?.
test/integration/users_login_test.rb:48:in `block in <class:UsersLoginTest>'知道这是怎么回事吗?在调试器中运行测试似乎表明cookies对象没有包含任何我所期望的内容(我在应用程序中设置了几个cookie,但它们都没有出现)。所有谷歌出现的都是一群人建议在集成测试中访问cookie是一个坏主意。如果有帮助的话,我正在运行Rails 5.1.2。
发布于 2020-02-06 01:06:21
Rails的早期版本改变了行为,Rails教程似乎由于旧版本的Rails而被弃用。
为了通过测试,你可以忘记helper,比如:
class UsersLoginTest < ActionDispatch::IntegrationTest
...
test "remember if checked in login" do
post login_path, params: { session: { email: @user.email, password: "password", remember_me: '1'}}
assert_not_empty cookies[:remember_token]
end
test "no remember if not checked in login" do
post login_path, params: { session: { email: @user.email, password: "password", remember_me: '1'}}
post login_path, params: { session: { email: @user.email, password: "password", remember_me: '0'}}
assert_empty cookies[:remember_token]
end
...
endhttps://stackoverflow.com/questions/47189347
复制相似问题