[quote=pski]Proszę poradźcie.
Mam aplikacje. Modele pokryte testami (Test::Unit)
I co dalej?
Czy testy funkcjonalny sa konieczne?
Capyabara, Cucumber, Steak, Selenium, Culurity Webraty, Shoulda … itp itd.
Dużo tych komponentów.
Testy są dla mnie więc nie ma znaczenia ich czytelność dla nie-programisty. Jest trochę javascriptu i fajnie jakby się dało przejść przez zewnętrzny serwis (np. dotpay)
Jaki zestaw sobie złożyć?
Pozdr.[/quote]
Na początek warto podzielić te narzędzia na 2 grupy, żeby nie mieszać jabłek z gruszkami:
- Frameworki do testów: cucumber, steak, shoulda, rspec… itp.
- Narzędzia do testowania stron imitujące przeglądarkę, używające przeglądarki lub udostępniające API do testowania: capybara, webrat, selenium, celerity, watir itp.
Zacznijmy od pierwszej grupy. Jeżeli testy są dla Ciebie, to odrzuciłbym od razu cucumbera. Steak jest nakładką na rpeca, więc żeby niepotrzebnie nie mieszać też bym go wyrzucił. Po co dorzucać jakieś zależności. Z powodzeniem możesz testować w test unit.
Jeżeli chodzi o narzędzia z drugiej grupy, to odradzam używanie bezpośrednio API do przeglądarek lub pseudo przeglądarek typu selenium, celerity itp. Dlaczego? Capybara i webrat zapewniają API, które pozwala bez zmian w testach korzystać z więcej niż jednego narzędzia. A z kolei z tych 2 capybara ma zdecydowanie lepsze podejście, przy czym obsługuje selenium, celerity/culerity i rack/test, więc możesz bez żadnych zmian w testach używać dowolnego z tych narzędzi.
Dlatego w tym wypadku najlepsze będzie combo test/unit + capybara. Żeby móc łatwo testować z test unit i capybarą, wystarczy wrzucić config do test helpera:
require "capybara/rails"
Capybara.default_driver = :rack_test
Capybara.default_selector = :css
i stworzyć klasę, która będzie udostępniała API dla testów integracyjnych:
class ActiveSupport::IntegrationCase < ActiveSupport::TestCase
include Capybara
include Rails.application.routes.url_helpers
end
Użycie jest banalnie proste:
[code]require ‘test_helper’
class PostsIntegrationTest < ActiveSupport::IntegrationCase
visit new_post_path
fill_in “Title”, :with => “Yupi!”
fill_in “Body”, :with => “Something”
click “Save”
assert page.has_content?(“Post has been successfully created”)
within “#posts” do
assert page.has_content?(“Yupi!”)
assert page.has_content?(“Something”)
end
end[/code]