Я делаю интеграционные тесты с Capybara в приложении Ionic, которые используют рельсы в backend, и у меня проблема после успешного входа, второй visit
ничего не делает, и у меня есть timeout while waiting for angular
.Capybara не работает с ионным приложением
# test_helper.rb
Dir[Rails.root.join("test/helpers/**/*.rb")].each { |f| require f }
require 'capybara/rails'
require 'capybara/poltergeist'
if ENV['VIEW_IN_BROWSER'] == "true"
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, :browser => :firefox)
end
else
Capybara.javascript_driver = :poltergeist
end
Capybara.server_port = 3000 # serveur rails en mode test
Capybara.always_include_port = true
Capybara.default_max_wait_time = 5
Capybara.raise_server_errors = false
class ActionDispatch::IntegrationTest
# Make the Capybara DSL available in all integration tests
include Capybara::DSL
include Capybara::Angular::DSL
def setup
super
end
def teardown
super
Capybara.reset_sessions!
Capybara.use_default_driver
end
end
Мой помощник:
#test/helpers/ionic_helper.rb
module IonicHelper
include Warden::Test::Helpers
Warden.test_mode!
def on_ionic_app
Capybara.app_host = 'http://localhost:5000' # Serveur ionic
begin
yield
rescue => error
puts error
ensure
Capybara.app_host = 'http://localhost:4321' # serveur ionic en mode intégration continue
end
end
def user_log_in
user = FactoryGirl.create(:user)
visit(Capybara.app_host+"/#/app/signin")
fill_in "email", with: user.email
fill_in "password", with: user.password
click_on "Connexion"
end
end
первой проблема в том, что я должен указать Capybara.app_host
к visit
mehod ударить хороший ионный порт (5000) Я не могу понять, почему.
Моей второй проблемы есть этот тест:
# reseau_test.rb
require "test_helper"
class ReseauTest < ActionDispatch::IntegrationTest
include IonicHelper
test "On s'assure que tous les elements en mode connecté soient présents" do
Capybara.current_driver = Capybara.javascript_driver
on_ionic_app do
user_log_in
visit(Capybara.app_host+"/#/app/network")
assert page.has_css?('span.count.following.text-center.ng-binding'), "Il doit y avoir un chiffre pour le nombre d'abonnements"
assert page.has_content?('Abonnements'), "Il doit y avoir le texte 'Abonnements'"
assert page.has_css?('span.count.follower.ng-binding'), "Il doit y avoir un chiffre pour le nombre d'abonnés"
assert page.has_content?('Abonnés'), "Il doit y avoir le texte 'Abonnés'"
end
end
end
Если удалить user_log_in
тестов работают нормально, но эта страница должна рассматриваться с вошедшим пользователем, и когда я проверить это, он терпит неудачу с timeout while waiting for angular
. Я могу поместить Capybara.default_max_wait_time
в 30, это терпит неудачу таким же образом.
Возникает ли ваша вторая проблема как с селеном, так и с полтергейстом? Если да - то, что видно в браузере с селеном. –
Да, проблема возникает с обоими. С селеном браузер просто показывает хорошую перенаправленную страницу (после входа в систему), не переходите ко второй ссылке посещения, подождите (зависит от default_max_wait_time) и закройте. –
Обновлен мой ответ со второй частью –