2015-11-04 2 views
6

У меня есть step_definitionтестовой страницы Перенаправление с Capybara + RSpec

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' 

Есть ли способ сделать сличитель немного подождать для URL, чтобы обновить?

ответ

13

Не используйте соединитель eq с current_path или current_url. Вместо этого используйте have_current_path Искатель предоставленную Капибара 2.5+

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

have_current_path согласовань использует поведение ожидания/Повторную попытку Капибары, поэтому он будет ждать страницы, чтобы изменить. Я добавил параметр url: true, чтобы сравнить его. Если Urls[target] разрешает только путь, вы можете удалить эту опцию.

+0

Спасибо! Я знал, что должно быть что-то, что использовало поведение ожидания. –

Смежные вопросы