首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rails中从ActionDispatch::IntegrationTest访问cookies

在rails中从ActionDispatch::IntegrationTest访问cookies
EN

Stack Overflow用户
提问于 2017-11-09 04:44:55
回答 1查看 219关注 0票数 1

我正在学习https://www.railstutorial.org/的第9章,在进行集成测试时遇到了麻烦。

测试看起来像这样:

代码语言:javascript
复制
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。但是,断言失败,并显示以下消息:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

发布于 2020-02-06 01:06:21

Rails的早期版本改变了行为,Rails教程似乎由于旧版本的Rails而被弃用。

为了通过测试,你可以忘记helper,比如:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47189347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档