使用Capybara + RSpec测试页面重定向

时间:2015-11-04 22:44:31

标签: rspec capybara

我有一个step_definition

Then(/^I should be redirected to the (.+?) page/) do |target|
  expect(current_url).to eq(Urls[target])
end

通常效果很好。有时当我使用恶作剧驱动程序时,它比平时更快,而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'

有没有办法让匹配器稍稍等待网址更新?

1 个答案:

答案 0 :(得分:20)

不要将eq匹配器与current_pathcurrent_url一起使用。相反,请使用Capybara 2.5+提供的have_current_path匹配器

expect(page).to have_current_path(Urls[target], url: true)

have_current_path匹配器使用Capybara的等待/重试行为,因此它将等待页面更改。我添加了url: true选项,以便比较完整的网址。如果Urls[target]仅解析为某个路径,则可以删除该选项。