Mam bardzo trudny czas, aby owijać głowę wokół tego problemu, więc każda pomoc zostanie bardzo doceniona.Debugowanie aplikacji Ajax jQuery w Cucumber + Capybara + PhantomJS w Railsach
Wszystko, co chcę zrobić, to przetestować prosty formularz rejestracyjny oparty na technologii Ajax na moim projekcie. Jeśli przesłanie formularza powiedzie się, nastąpi przekierowanie do strony powitalnej. Jeśli nie, otrzymasz odpowiednie błędy sprawdzania poprawności powiązane z każdym błędnym polem.
Z jakiegoś dziwnego powodu Capybara nie śledzi przekierowania. Wywoływane jest wywołanie Ajax i widzę nowe konto zarejestrowane w bazie danych, ale wywołanie zwrotne onSuccess
albo nie jest w ogóle wywoływane, albo przekierowanie jest ignorowane.
Oto co usiłuję pracować (dla zwięzłości, mam skondensowany kod):
Cecha:
Feature: Registration
In order to obtain a new account
As a prospective customer
I must submit a valid registration form.
@javascript
Scenario: A valid registration attempt
Given an account registration form
When I complete the form with valid values
Then I should be redirected to the welcome screen
Test:
Given(/^an account registration form$/) do
visit("/signup")
assert current_path == "/signup"
end
When(/^I complete the form with valid values$/) do
within("#signupForm") do
fill_in("email", :with => Faker::Internet.email)
fill_in("name", :with => Faker::Name.name)
fill_in("password", :with => "11111111")
click_link("signupFormSubmit")
end
end
Then(/^I should be redirected to the welcome screen$/) do
assert current_path == "/welcome"
end
JavaScript:
console.log('I am not yet inside you.')
$.post(url, form.serialize(), function(response) {
// everything went well
// let's redirect them to the given page
window.location.replace(response.redirectUrl)
console.log('I am inside you and it is good.')
}, function(response) {
// collect error responses from API
// apply error hints to associated fields
console.log('I am inside you and something went wrong.')
})
Dobrze, więc ten konkretny test działa dobrze, dopóki nie dojdziemy do punktu, w którym mamy przekierować użytkownika na ekran powitalny. Próbowałem wszystkiego, co mogłem, aby zobaczyć, co się dzieje wewnątrz callbacków onSuccess
, onFailure
, ale bez skutku. To tak, jakby kod nie był nawet wykonywany.
Właśnie uzyskać następujące dane wyjściowe z testu:
Then I should be redirected to the welcome screen # features/step_definitions/registration.rb:51
Failed assertion, no message given. (MiniTest::Assertion)
./features/step_definitions/registration.rb:52:in `/^I should be redirected to the welcome screen$/'
features/registration.feature:15:in `Then I should be redirected to the welcome screen'
Nie ma znaczenia, jeśli wyjątek, nie odebrano. Połączenia z numerami console.log()
również nie są wywoływane.
Czy ktoś to widział? Jeśli tak, czy istnieje obejście? Jeśli potrzebujesz więcej informacji, po prostu zapytaj, będę bardziej niż szczęśliwy, aby zapewnić.