使用 Capybara + RSpec 测试页面重定向
test page redirection with Capybara + RSpec
我有一个step_definition
Then(/^I should be redirected to the (.+?) page/) do |target|
expect(current_url).to eq(Urls[target])
end
而且通常效果很好。有时,当我使用 poltergeist 驱动程序时,它比正常情况下运行得更快,并且 current_url 仍然是旧页面。那是我收到这样的错误的时候:
Then I should be redirected to the login page # features/step_definitions/navigate-steps.rb:64
expected: "http://example.com/"
got: "http://example.com/reset-password"
(compared using ==)
(RSpec::Expectations::ExpectationNotMetError)
./features/step_definitions/navigation.rb:50:in `/^I should be redirected to the (.+?) page$/'
features/password.feature:100:in `Then I should be redirected to the login page'
有没有办法让匹配器稍微等待 url 更新?
不要将 eq
匹配器与 current_path
或 current_url
一起使用。相反,请使用 Capybara 2.5+
提供的 have_current_path
匹配器
expect(page).to have_current_path(Urls[target], url: true)
have_current_path
匹配器使用 Capybara 的 waiting/retrying 行为,因此它将等待页面更改。我添加了 url: true
选项以使其比较完整 url。如果 Urls[target]
仅解析为路径,您可以删除该选项。
我有一个step_definition
Then(/^I should be redirected to the (.+?) page/) do |target|
expect(current_url).to eq(Urls[target])
end
而且通常效果很好。有时,当我使用 poltergeist 驱动程序时,它比正常情况下运行得更快,并且 current_url 仍然是旧页面。那是我收到这样的错误的时候:
Then I should be redirected to the login page # features/step_definitions/navigate-steps.rb:64
expected: "http://example.com/"
got: "http://example.com/reset-password"
(compared using ==)
(RSpec::Expectations::ExpectationNotMetError)
./features/step_definitions/navigation.rb:50:in `/^I should be redirected to the (.+?) page$/'
features/password.feature:100:in `Then I should be redirected to the login page'
有没有办法让匹配器稍微等待 url 更新?
不要将 eq
匹配器与 current_path
或 current_url
一起使用。相反,请使用 Capybara 2.5+
have_current_path
匹配器
expect(page).to have_current_path(Urls[target], url: true)
have_current_path
匹配器使用 Capybara 的 waiting/retrying 行为,因此它将等待页面更改。我添加了 url: true
选项以使其比较完整 url。如果 Urls[target]
仅解析为路径,您可以删除该选项。