gpt4 book ai didi

ruby-on-rails - 从 Rails 中的 ActionDispatch::IntegrationTest 访问 cookie

转载 作者:行者123 更新时间:2023-12-05 06:37:46 24 4
gpt4 key购买 nike

我正在学习 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 对象不包含任何我期望的东西(我在应用程序中设置了几个 cookies,但没有一个出现)。所有谷歌出现的都是一群人,他们建议在集成测试中访问 c​​ookies 是个坏主意。如果有帮助,我正在运行 Rails 5.1.2。

最佳答案

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

关于ruby-on-rails - 从 Rails 中的 ActionDispatch::IntegrationTest 访问 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47189347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com