我正在通过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的函数,并且似乎按预期工作。这个函数的一个副作用是名为&#39; remember_token&#39;得到了设定。但是,断言失败并显示以下消息:
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>'
知道这里发生了什么吗?在调试器中运行测试似乎表明cookie对象不包含任何看起来像我期望的东西(我在应用程序中设置了几个cookie,并且它们都没有出现)。所有谷歌出现的都是一群人建议在集成测试中访问cookie是个坏主意。如果有帮助的话,我正在运行Rails 5.1.2。
答案 0 :(得分:0)
Rails的早期版本改变了行为,Rails教程似乎由于旧版本的Rails而被弃用。
要通过测试,您可以忘记以下帮助程序:
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
...
end