21

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 が発生します(少なくとも私にとっては)。ただし、次の場合はすべての仕様に合格します。

  1. Geocoder を初期化する行を削除します(サンプル アプリでは使用されていませんが、私は使用しています)。
  2. Map を初期化する行を削除します。
  3. あなたが些細なスタイルシートを提供するとき、私を最も驚かせたのは、それ以上のものではありません:
#map{ 幅: 600px ; 高さ: 600px }

Gem は、アプリで使用しているものとまったく同じです。にはサードパーティのスクリプトがいくつかあります/vendor/assets

4

2 に答える 2

0

グループ :production do を持つように GemFile を変更しようとしましたか?

そして、このスクリプト全体を適切な場所にロードしていますか?

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false">

この例はブートストラップ用です:

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&key=YOUR_API_KEY&sensor=SET_TO_TRUE_OR_FALSE"
type="text/javascript">
</script>
于 2013-04-01T16:40:59.390 に答える