2015-11-04 40 views
6

Mam step_definitiontestu strona przekierowanie z Kapibara + RSpec

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

i ogólnie działa dość dobrze. Czasami, gdy używam sterownika poltergeist, działa on szybciej niż normalnie, a current_url jest wciąż starą stroną. Właśnie wtedy pojawiają się takie błędy:

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' 

Czy jest jakiś sposób, aby dopasować trochę czasu na aktualizację adresu URL?

Odpowiedz

13

Nie należy używać matcher eq z current_path lub current_url. Zamiast tego należy użyć dopasowywania have_current_path dostarczone przez Kapibara 2.5+

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

have_current_path dopasowujący używa zachowanie czekanie/Ponowna próba kapibary, więc będzie poczekać do wprowadzania zmian na stronie. Dodałem opcję url: true, aby porównać pełny adres URL. Jeśli Urls[target] rozwiąże tylko ścieżkę, możesz usunąć tę opcję.

+0

Dzięki! Wiedziałem, że musi istnieć coś, co wykorzystywało zachowanie oczekujące. –