Cześć chciaęm nauczyć się testować aplikacje z użyciem capybary i zacząłem pisać test do asynchronicznego formularza.
Testuję dokładnie akcję dodania wpisu
Fragment
def create @post = Post.new(post_params) @post.save respond_to do |format| format.html do flash[:notice] = "Dziękujemy za dodanie wpisu" redirect_to posts_path end format.js { } end end
Mam też plik create.js.erb
$("#form-container").hide(500, function() { $("#form-container").html("<div class=\"alert alert-success\">Dziękujemy za wpis!</p>"); $("#form-container").show(500); });
Jak testuję ten formularz manualnie wszystko działa tak jak tego oczekuję.
Jednak gdy napisałem testy ta akcja się nie wywołuje w oknie przeglądarki widać jak zostaje wypełniony formularz automatycznie ale potem nic się nie pokazuje
require "rails_helper" Capybara.current_driver = :selenium Capybara.javascript_driver = :selenium_chrome describe 'some stuff which requires js', js: true do it "works probably", js: true do visit '/posts' click_link "Dodaj własny wpis już teraz." assert page.has_content?('Dodawanie nowego wpisu') fill_in "Autor", with: "Testowy Autor" fill_in "Treść", with: "Testowa treść" click_button "Dodaj wpis" Capybara.default_max_wait_time = 5#assert page.has_css?('div.alert.alert-success') assert page.find('div.alert').has_content?('Dziękujemy za dodanie wpisu') end end
Probowalem też z Unit Testem
class GuestBookTest < ActionDispatch::IntegrationTest setup do Capybara.current_driver = :selenium Capybara.javascript_driver = :selenium_chrome end test "creates a post" do visit posts_path click_link "Dodaj własny wpis już teraz." assert page.has_content?('Dodawanie nowego wpisu') fill_in "Autor", with: "Testowy Autor" fill_in "Treść", with: "Testowa treść" click_button "Dodaj wpis" Capybara.default_max_wait_time = 5 assert page.find('div.alert').has_content?('Dziękujemy za dodanie wpisu') end end
Widok formularza to:
``