gpt4 book ai didi

ruby-on-rails - 使用Google Maps时, capybara 测试在第一个测试中失败并显示Timeout::Error

转载 作者:行者123 更新时间:2023-12-03 12:00:12 25 4
gpt4 key购买 nike

我正在使用RSpec + Capybara + Selenium(Firefox)进行测试。无论我运行的验收测试的哪个子集,第一个都会失败,(下一个测试可以正常工作),原因如下:

 Failure/Error: visit '/'
Timeout::Error:
Timeout::Error

我的应用程序严重依赖GoogleMaps和BackboneJS。当我运行测试时,页面无法完成加载,并且“正在从maps.googleapis.com传输数据”消息停留在Firefox窗口的左下方,但是页面看起来好像已正确加载(存在 map 和其他内容)。我已经将超时设置为60秒,以排除任何慢速网络问题。并且所有后续测试的确非常快地工作(例如,已获取正确的Google脚本并已将其缓存)。另外,当我在开发环境中启动服务器并访问它( localhost:3000)时,一切正常。

Firefox 17.0.1。我的一些 gem :
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:
# 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 = :seleniumCapybara.default_wait_time = 60

EDIT2:

It used to work properly before (few weeks ago; this project was halted for that time). Could be introduced by RSpec upgrade from 2.11 to 2.12 (which I did those few weeks ago), but I've just tried to downgrade it and same things do happen. I've reverted whole codebase to the point month ago to exclude possible gem regression. Problem still happens.

EDIT3:

I've just discovered that if I comment out the line responsible for attaching map from Google:

new google.maps.Map($("#map")[0], mapOptions)

然后一切都像魅力。

编辑4:

示例应用程序的源代码: https://github.com/skalee/capybara-google-maps-failure

运行所有规范将在第一个规范中导致Timeout::Error(至少对我而言)。但是,所有规格将在以下情况下通过:
  • 删除line which initializes Geocoder(示例应用程序中未使用它,但我在我的应用程序中使用了它)。
  • 删除line which initializes Map
  • 当您提供琐碎的样式表时,最让我惊讶的是:

  • #map {width:600px;高度:600像素}

    gem 与我在应用程序中使用的 gem 完全相同。 /vendor/assets中有一些第三方脚本。

    最佳答案

    您不应依赖外部服务进行测试。这是一个策略:

    http://robots.thoughtbot.com/post/34761570235/using-capybara-to-test-javascript-that-makes-http

    关于ruby-on-rails - 使用Google Maps时, capybara 测试在第一个测试中失败并显示Timeout::Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13784140/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com