2016-04-11 3 views
0

Я делаю интеграционные тесты с 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, это терпит неудачу таким же образом.

+0

Возникает ли ваша вторая проблема как с селеном, так и с полтергейстом? Если да - то, что видно в браузере с селеном. –

+0

Да, проблема возникает с обоими. С селеном браузер просто показывает хорошую перенаправленную страницу (после входа в систему), не переходите ко второй ссылке посещения, подождите (зависит от default_max_wait_time) и закройте. –

+0

Обновлен мой ответ со второй частью –

ответ

0

Первая проблема: причина, по которой у вас проблемы с app_host, заключается в том, что вы указываете Capybara.always_include_port = true. Это означает, что порт, который будет посещать, будет установлен в порт. Capybara запускает сервер, если только адрес, переданный в visit, не указан. Так как это не похоже на то, что вы хотите, чтобы visit подключался напрямую к серверу, запущенному Capybara, вы должны установить его удаление или установить его на Capybara.always_include_port = false. С его ложью вы можете просто установить Capybara.app_host по мере необходимости и использовать его как старт по умолчанию для visit

Ваш второй вопрос вызван тем, что JS capybara-angular работает на странице, которая никогда не показывает страницу как готовую , Проверьте на наличие ошибок в JS, которые могут препятствовать упущенности capybara, или посмотреть на https://github.com/wrozka/capybara-angular/issues/20

Смежные вопросы