Я тестирую 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)
У вас есть идея, почему это происходит и как его предотвратить?
EDIT:
spec/spec_helper.rb
:
# This file is copied to spec/ when you run 'rails generate rspec:install' ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'rspec/autorun' # Requires supporting ruby files with custom matchers and macros, etc, # in spec/support/ and its subdirectories. Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} RSpec.configure do |config| config.include FactoryGirl::Syntax::Methods config.treat_symbols_as_metadata_keys_with_true_values = true config.infer_base_class_for_anonymous_controllers = false #config.order = "random" end
spec/features/features_spec_helper.rb
:
require_relative "../spec_helper" require 'capybara/rspec' Capybara.default_driver = :selenium Capybara.default_wait_time = 60
EDIT2:
Раньше он работал правильно (несколько недель назад, этот проект был остановлен на то время). Может быть представлен обновлением RSpec от 2.11 до 2.12 (что я сделал несколько недель назад), но я просто попытался понизить его, и это произойдет. Я вернул всю базу кода в месяц назад, чтобы исключить возможную регрессию драгоценных камней. Проблема все еще происходит.
EDIT3:
Я только что обнаружил, что если я прокомментирую строку, отвечающую за привязку карты от Google:
new google.maps.Map($("#map")[0], mapOptions)
тогда все работает как шарм.
EDIT4:
Исходный код примера приложения: https://github.com/skalee/capybara-google-maps-failure
Запуск всех спецификаций приведет к тому, что Timeout:: Error в первом (по крайней мере для меня). Однако все спецификации передаются, когда:
- Вы удаляете строку, которая инициализирует Geocoder (она не используется в примере приложения, но я использую ее в своем).
- Вы удаляете строку, которая инициализирует карту.
- Что меня больше всего удивило, когда вы предоставляете тривиальную таблицу стилей, как ничто другое:
#map{ width: 600px ; height: 600px }
Драгоценные камни - это точно такие же драгоценности, как и в моем приложении. В /vendor/assets
есть сторонние скрипты.