2016-04-11 2 views
0

私は、バックエンドでレールを使用するIonicアプリでCapybaraとの統合テストを行っています。正常にサインインした後に問題があります。は何もせず、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 

最初の問題は、私は良好なイオンのポート(5000)をヒットするvisit mehodにCapybara.app_hostを指定する必要があること、私は理由を理解することはできませんです。私はuser_log_inテストが正常に動作取り除くが、このページはログインしているユーザーに見られることがあり、私はそれをテストするとき、それが失敗した場合

# 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 

マイ第二の問題であるが、この試験でありますtimeout while waiting for angular。私は同じ方法で失敗するCapybara.default_max_wait_timeを30に置くことができます。

+0

2番目の問題はセレンとポルターガイストの両方で発生しますか?もしそうなら、セレンでブラウザに何を表示しますか? –

+0

はい、両方で問題が発生します。セレンを使用すると、ブラウザはリダイレクトされた良好なページを表示し(ログイン後)、2回目の訪問リンクには行かず、待機(default_max_wait_timeに依存)して終了します。 –

+0

私の答えは2番目の部分で更新されました –

答えて

0

最初の問題:Capybara.always_include_port = trueを指定しているため、app_hostで問題が発生している理由があります。これは、訪れたポートが強制的にポートに設定されるようにします。visitに渡されたアドレスにデフォルト以外のポートが指定されていない限り、Capybaraはサーバーを実行しています。 visitがCapybaraによって実行されているサーバーに直接接続したいと思わないように見えるので、それを削除するか、Capybara.always_include_port = falseに設定する必要があります。それが偽であれば、必要に応じてCapybara.app_hostを設定することができます。visit

あなたの2番目の問題は、ページで実行されているcapybara-angularがページを実行していない。カピバラ・アングルに問題があるのを防ぐことができるJSのエラーをチェックしてください。https://github.com/wrozka/capybara-angular/issues/20

関連する問題