Ich benutze Ruby on Rails 3.2.2, Gurke-Schienen-1.3.0, Rspec-Schienen-2.8.1 und Capybara-1.1.2 mit dem Selenium-Treiber. Ich habe ein Problem bezüglich der Parallelität bei der Ausführung von JavaScript-Szenarios (angenommen, dass mein Fall mit einem Parallelitätsproblem zusammenhängt).Wie vermeidet man Nebenläufigkeitsprobleme durch Ausführen von @ Javascript-Szenarien?
In meiner .feature
Datei ich habe:
Feature: ...
...
@javascript
Scenario: ...
Given ...
When I log out
Then I should be redirected to the home page
In meinem Schritt Definition .rb
Datei ich habe:
Then /^I should be redirected to the home page$/ do
current_path.should == root_path
end
Wenn ich die cucumber
Befehlszeile im Terminal-Fenster laufen, so dass Tests auszuführen, Ich bekomme diesen Fehler:
$ cucumber
Using the default profile...
Feature: ...
...
@javascript
Scenario: ...
...
When I log out
Then I should be redirected to the home page
expected: "/"
got: "/user" (using ==) (RSpec::Expectations::ExpectationNotMetError)
...
Allerdings wenn in meinem Schritt Definition .rb
Datei I
Then /^I should be redirected to the home page$/ do
sleep(1)
current_path.should == root_path
end
verwenden funktioniert es wie erwartet: alle Tests bestanden.
Also, auch wenn das Problem scheint, gelöst gibt es eine bessere Möglichkeit, um mein Problem zu behandeln? Wenn ja, was ist die "richtige"/"häufig verwendete" Lösung (vielleicht mit einigen Capybara API) ?
In der ** [Capybara offizielle Dokumentation] (https://github.com/jnicklas/capybara) ** im Abschnitt "** Drivers >> Selenium **" heißt es "* [...] Capybara kann blockieren und darauf warten, dass Ajax-Anforderungen nach dem Interagieren mit der Seite abgeschlossen werden. Um dieses Verhalten zu aktivieren, setzen Sie die Option: resynchronize driver auf true. [...] * ", aber (wenn Sie darauf verweisen Sie sagen "Das Problem ist, dass Gurke nicht mit Ihrer Anwendung synchronisiert ist") Ich habe nicht verstanden, wie und wo die '' resynchronize' 'Treiberoption eingestellt werden soll. * Hinweis *: In Code, den ich in der Frage gemeldet habe, teste ich eine JavaScript-Umleitung. – Backo