Problem z Capybarą i asynchronicznym formularzem

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:
``

Dodawanie nowego wpisu

<%= form_for @post,remote:true do |f| %>
<%= f.label :author, "Autor" %> <%= f.text_field :author, class: "form-control" %>
<%= f.label :body, "Treść" %> <%= f.text_area :body, class: "form-control" %>
<%= f.submit "Dodaj wpis", class: "btn btn-default" %> <% end %>
``

Jakby Ci się udało wydzielić ten problem do repozytorium na gh, które można szybko odpalić to prędzej Ci ktoś pomoże.

$("#form-container").html("<div class=\"alert alert-success\">Dziękujemy za wpis!</p>");

Otwierasz diva a zamykasz paragraf. Spróbuj:
$("#form-container").html("<div class="alert alert-success">Dziękujemy za wpis!</div>");

Ciężko żeby Capybara znalazła tam diva, jeśli go nie ma :stuck_out_tongue:

P.S.
@post = Post.new(post_params) @post.save

To to samo co Post.create(post_params)

Ok, wydzieliłem repozytorium z tym problemem https://github.com/mbronek7/rspec-capybara
Problem wystepuje gdy zaczynam testować poleceniem bundle exec rspec .Widzę jak formularz jest automatycznie wypełniany ale nie następuje żadna akcja po wcisnieciu przycisku “Dodaj wpis”. Jeżeli usune z kontrolera format.js {} to wszystko działa tak jak powinno, ale ja chciałbym właśnie przetestować tą akcję wywoływana asynchronicznie.