RSpec + Capybara + Selenium (Firefox) でテストしています。受け入れテストのどのサブセットを実行しても、最初のテストは次のような「理由」で失敗します (次のテストは正しく機能します)。
Failure/Error: visit '/'
Timeout::Error:
Timeout::Error
私のアプリケーションは、GoogleMaps と BackboneJS に大きく依存しています。テストを実行すると、ページの読み込みが完了せず、「maps.googleapis.com からデータを転送しています」というメッセージが Firefox ウィンドウの左下に表示されたままになりますが、ページは正しく読み込まれたように見えます (地図やその他のコンテンツが存在します)。遅いネットワークの問題を除外するために、既にタイムアウトを 60 秒に設定しています。その後のすべてのテストは非常に高速に動作します (適切な Google スクリプトがフェッチされ、既にキャッシュされているように)。また、開発環境でサーバーを起動してアクセスすると( localhost:3000
)、すべて正常に動作します。
Firefox 17.0.1。私の宝石のいくつか:
capybara (2.0.1)
database_cleaner (0.9.1)
mongoid (3.0.13)
rspec (2.12.0)
rspec-core (2.12.1)
rspec-expectations (2.12.0)
rspec-mocks (2.12.0)
rspec-rails (2.12.0)
selenium-webdriver (2.26.0)
なぜこれが起こるのか、それを防ぐ方法はありますか?
編集:
spec/spec_helper.rb
:
# このファイルは、「rails generate rspec:install」を実行すると spec/ にコピーされます ENV["RAILS_ENV"] ||= 'テスト' require File.expand_path("../../config/environment", __FILE__) 「rspec/rails」が必要 「rspec/autorun」が必要 # カスタム マッチャーやマクロなどを含む Ruby ファイルのサポートが必要です。 # spec/support/ およびそのサブディレクトリ内。 Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| f}が必要です RSpec.configure do |config| config.include FactoryGirl::Syntax::メソッド config.treat_symbols_as_metadata_keys_with_true_values = true config.infer_base_class_for_anonymous_controllers = false #config.order = "ランダム" 終わり
spec/features/features_spec_helper.rb
:
require_relative "../spec_helper" 「カピバラ/rspec」が必要 Capybara.default_driver = :selenium Capybara.default_wait_time = 60
EDIT2:
以前は正常に動作していました (数週間前、このプロジェクトは一時中断されました)。 RSpec の 2.11 から 2.12 へのアップグレード (数週間前に行った) によって導入される可能性がありますが、ダウングレードしようとしたところ、同じことが起こります。 gem のリグレッションの可能性を排除するために、コードベース全体を 1 か月前の時点に戻しました。問題はまだ発生します。
EDIT3:
Google からの地図の添付を担当する行をコメント アウトすると、次のことがわかりました。
new google.maps.Map($("#map")[0], mapOptions)
その後、すべてが魅力のように機能します。
EDIT4:
サンプル アプリケーションのソース コード: https://github.com/skalee/capybara-google-maps-failure
すべてのスペックを実行すると、最初のスペックで Timeout::Error が発生します(少なくとも私にとっては)。ただし、次の場合はすべての仕様に合格します。
- Geocoder を初期化する行を削除します(サンプル アプリでは使用されていませんが、私は使用しています)。
- Map を初期化する行を削除します。
- あなたが些細なスタイルシートを提供するとき、私を最も驚かせたのは、それ以上のものではありません:
#map{ 幅: 600px ; 高さ: 600px }
Gem は、アプリで使用しているものとまったく同じです。にはサードパーティのスクリプトがいくつかあります/vendor/assets
。