To z mojej strony kolejne już z rzędu podejście do tematu testowania javascriptów i zaczynam być lekko sfrustrowany gdyż za każdym razem ponoszę kompletną klęskę. I to nie podczas pisania testów a podczas konfiguracji środowiska. Sprawa składa się z paru problemów więc opiszę je po kolei.
Selenium
Postanowiłem zacząć od domyślnego drivera żeby zbytnio nie komplikować sprawy. Napisałem sobie testy sprawdzające formularz logowania (bez js!) i wszystko działa bez zarzutu. Niestety, kiedy włączam sobie wsparcie js dla tych testów, zaczynam dostawać nieco absurdalne komunikaty. Oto moje testy:
require 'rails_helper'
feature "Signing In", js: true do
background do
@user = FactoryGirl.create(:user)
end
scenario "Signing in with correct credentials" do
visit '/users/sign_in'
within("#new_user") do
fill_in 'Email', :with => @user.email
fill_in 'Password', :with => 'TestPass'
end
click_button 'Log in'
expect(page).to have_content 'successfully'
end
end
Po uruchomienia wsparcja js, z jakiegoś niezrozumiałego dla mnie powodu, user stworzony w bloku background
przestaje istnieć w bazie (sprawdzam to w widoku z formularzem logowania używając debug User.all
, zwraca []
) i rzecz jasna logowanie nie działa. Podkreślam, że dzieje się tak wyłącznie po aktywowaniu js.
Cała konfiguracja środowiska jest dosyć standardowa ale jeśli coś by mogło się tutaj okazać pomocne w diagnozie, to piszcie śmiało. Tak na pierwszy rzut jedyne co przychodzi mi do głowy to fakt, że używam database_cleaner
i może on jakoś czyści tą bazę ale nie rozumiem czemu miało by się tak dziać jedynie w trybie js. (plik spec/support/database_cleaner.rb
: https://gist.github.com/mbajur/037b754c9ab5f7cb57fa). Tak czy owak, to samo dzieje się po skasowaniu tego pliku z konfiguracją database_cleaner.
Webkit jako domyśly silnik js
Próbowałem skonfigurować webkita jako domyslny silnik do js na wszystkie sposoby znalezione na necie ale żaden nie chce działać, zawsze capybara używa selenium. Moje próby polegały na wstawieniu Capybara.default_driver = :selenium
w różnych miejscach mojej aplikacji, tj. spec/support/env.rb
, spec_helper.rb
, rails_helper.rb
, config/initializers/capybara.rb
oraz już na chama w testach ale zawsze i tak odpala sie selenium.
Z góry dzięki za pomoc!