【问题标题】:Accessing cookies from ActionDispatch::IntegrationTest in rails从 Rails 中的 ActionDispatch::IntegrationTest 访问 cookie
【发布时间】:2020-02-06 01:06:21
【问题描述】:

我正在完成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>'

知道这里发生了什么吗?在调试器中运行测试似乎表明 cookie 对象不包含我所期望的任何内容(我在应用程序中设置了几个 cookie,但它们都没有出现)。所有谷歌出现的都是一堆人建议在集成测试中访问 c​​ookie 是个坏主意。如果有帮助,我正在运行 Rails 5.1.2。

【问题讨论】:

    标签: ruby-on-rails cookies


    【解决方案1】:

    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
    
      ...
    
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多