【问题标题】:assert current_path断言 current_path
【发布时间】:2011-10-13 22:40:49
【问题描述】:
 require 'test_helper'

     class MyTest < ActionController::IntegrationTest

      test "view posts from login page" do
      visit("/logins/new")
      find_field('Username').set('abode')
      find_field('Password').set('efghi')
      click_link_or_button('Login')
      #assert current_path == "/logins/new"
      assert current_path == "/posts/index" 
      end

    end

在上面的代码中,第一个断言通过,而第二个断言失败。否则它应该发生。在click_link_or_button('Login') 执行后,我假设的页面登录。我做错了什么?

谢谢!

【问题讨论】:

    标签: ruby-on-rails integration-testing capybara


    【解决方案1】:

    对于现在搜索这个问题的任何人——使用 Capybara 2.5 你可以做到

    assert_current_path('/posts/index')
    

    它会使用 Capybara 的等待行为来检查路径是否更改为预期的路径

    【讨论】:

      【解决方案2】:

      您实际上想测试什么? current_path 不可能同时是“/logins/new”和“/posts/index”。

      我会说将第一个断言移到访问步骤之后。然后你的测试就有意义了。如果仍然失败,则登录操作无效。

      【讨论】:

      • 哦,不,实际上我在评论一个并运行另一个。这是在集成测试中。
      • 我在访问后放了第一个断言,它通过了。
      • @Vinisa 整个测试都通过了,还是只是第一个断言?
      • assert current_path == "/logins/new" 正在工作,这意味着它没有登录,而assert current_path == "/posts/index" 不是理想情况下应该的。
      【解决方案3】:

      current_path 变量似乎还没有更新它的新路径值。所以你需要等待路径。我做了两件事:fixed a bug preveting correct current_path variable updaterspec-wait gem。所以期望代码如下:

      wait_for{ page }.to have_current_path(posts_path)
      

      【讨论】:

        猜你喜欢
        • 2017-10-17
        • 1970-01-01
        • 2012-09-16
        • 1970-01-01
        • 2020-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-08
        相关资源
        最近更新 更多