Próbuję użyć celerity do testowania mojej aplikacji. PRAWIE działa.
Problem pojawia się w formaularzu, gdzie użyłem masked input (plugin jQuery).
Kod pocztowy oraz NIP mają założone maski (##-### oraz ###-###-##-##).
Helper wypełniający pola wygląda mniej więcje tak (używam Cucumbera)
When /I fill in "([^\"]*)" with "([^\"]*)"$/ do |field, value|
$browser.text_field(:id, find_label(field).for).set(value)
end
W Cucumberze mam:
And I fill in "Kod pocztowy" with "87-800"
And I fill in "Miejscowość" with "Włocławek"
And I fill in "NIP" with "888-298-86-27"
Niestety celerity nie wypełnia tych pól:
Jeżeli są jakieś problemy z wpisywaniem wartości w pola obsługiwane javascriptem, to możesz spróbować wrzucić tam dane javascriptem właśnie. Będzie to mniej wiarygodne niż wypełnienie tych pól przez celerity, ale innego wyjścia czasami nie ma. Tutaj jest przykładowo mój krok do wrzucania treści do tinyMCE:
When /^I fill in tinyMCE editor "([^\"]*)" with "(.*)"$/ do |label, value|
label = $browser.label :text, /#{label}/i
id = label.for
$browser.execute_script(<<-EOF
var instance = tinymce.EditorManager.get('#{id}');
instance.setContent('#{value}');
EOF
)
end
Jeżeli da się ustawić wartość tego pola z javascriptu, to spróbuj tak właśnie to zrobić.
Dzięki, pomogło. CO nie znaczy, że cucumber/celerity mnie lubią
(usunąłem step definitions webrata).
Mam taki test:
[code]Feature: Manage sellers
In order to generate invoices
as many sellers, user
wants manage sellers
Background:
Given no sellers
When I am on sellers page
Then I should see “Lista sprzedawców”
Scenario: Delete sellers
Given the following sellers:
|name | street | zipcode | city | nip |
| Jakas. | Jakas | 87-800 | Włocławek | 111-111-22-33 |
|Inna | Jakaś 11 | 88-111 | Pćmin Większy | 222-111-22-33 |
When I delete the 1st seller
Then I should see the following sellers:
| Nazwa | Miejscowość | NIP |
|Inna | Pćmin Większy | 222-111-22-33 |
Scenario: Register new seller
Given I am on the new seller page
Then I should see “Nowy sprzedawca”
When I fill in “Nazwa” with “Jakas”
And I fill in “Ulica” with “Ulica 11”
And I fill in masked input “Kod pocztowy” with “87-800”
And I fill in “Miejscowość” with “Włocławek”
And I fill in masked input “NIP” with “888-111-22-22”
And I follow “Utwórz”
And I wait for the AJAX call to finish
Then I should be on sellers page
And I should see “zapisany”[/code]
Kolejność scenariuszy nic nie zmienia.
Chodzi o to, że Given no sellers nie działa (jest jam po prostu kod Seller.destroy_all
), gdzie Given sellers w scenariuszu usuwania działa poprawnie.
Objawia się to tym, że za pierwszym razem test przechodzi, za drugim razem w testowej bazie danych wisi dodany przez scenariusz “Register new seller” rekord. Given no sellers:
Given /^no sellers$/ do
Seller.destroy_all
if Seller .count > 0
raise "Few sellers left!"
end
end
Exception nie wyskakuje, ale dalej test się wysypuje po zapisywaniu. Kontroller nie dodaje rekordu, bo taki NIP jednak już istnieje (gdy spojrzeć w bazę danych - rekord jest - krok nie usunął go z bazy).
Spróbuję może jeszcze selenium, ale to chyba nie ma znaczenia…
Wyczytane w FAQ cucumbera. No nie sposób wszystko przeczytać na raz ;)[/quote]
To powinno być w h1 w pierwszych linijkach dokumentacji, z godzinę na to straciłem
/opt/jruby/lib/ruby/gems/1.8/gems/celerity-0.0.6/lib/celerity/browser.rb:367:
in `send_keys': NotImplementedError (NotImplementedError)
[/quote]
Widocznie tylko w Watirze… ;]