Test::Unit Capybara - testowanie JS

Zgodnie z sugestią drogus’a postanowiłem wypróbować kombo Test::Unit + Capybara do testów
http://rubyonrails.pl/forum/t3408-Testowy-zamet-%3A)

O ile łatwo znaleźć w Google że jeśli chcemy wystestować JS w RSpecu to wystarczy dodać do bloku :js => true
To nic nie znalazłem na temat testowania JS w takim zestawie gemów:

[code=ruby]group :test do

Pretty printed test output

gem ‘turn’#, :require => false
gem ‘capybara-webkit’
gem ‘capybara’
gem ‘factory_girl_rails’
end[/code]
Korzystam z tego pluginu do dodawania ajaxowego plików
https://github.com/valums/file-uploader/blob/master/client/fileuploader.js

Gdy w teście integracyjnym mam napisane:

attach_file "file", path_to_file

wywala mi błąd

 cannot attach file, no file field with id, name, or label 'file' found

Dzieje się tak prawdopodobnie dlatego że owy plugin dodaje w locie kod html, a sama capybara to nie przeglądarka.
BTW podobnie dodaje w locie HTML ten gem:

Jak to przetestować? Trzeba dodać jakiś znacznik :js => true
w Test::Unit?

domyślnie capybara korzysta z :rack_test, który nie wspiera javascriptu.
na początku testu dodaj:

Capybara.current_driver = :selenium

na końcu wróć do domyślnego:

Capybara.use_default_driver

aczkolwiek ja osobiście polecam użyć capybara-webkit (google it) - jest szybkie, wspiera js, jest “bezgłowe” – same zalety :wink:

Przecież napisałem że korzystam z webkit

[quote][code]group :test do

Pretty printed test output

gem ‘turn’#, :require => false
gem ‘capybara-webkit’
gem ‘capybara’
gem ‘factory_girl_rails’
end[/code]
[/quote]

Zapomniałeś dodać że do zainstalowania capybara-webkit wymagane jest posiadane bibliotek qt4.
Jeśli nie jesteś szczęściarzem i nie korzystasz z:

Apdejt:

Po dodaniu do testu:

Capybara.javascript_driver = :webkit [...] Capybara.use_default_driver
Efekt ten sam czyli

cannot attach file, no file field with id, name, or label 'file' found

o, sorry, faktycznie, nie wiem ja, ale mi to jakoś umknęło :slight_smile:

powinno się dać - webkit wspiera js.

Co do instalacji - na osx też to trwa troszkę :wink:

Capybara ma fajną metodę do debugowania: save_and_open_page - dodaj przed metodą, która wywala błąd, zobaczysz jaki html jest wyrenderowany.

Spróbuj to odpalić w trybie :selenium, jeżeli załapie to wina capybara-webkit, jeżeli nie, to znaczy, że coś jest źle z testem. Jak już będziesz to wiedział, to łatwiej będzie dalej debugować.