Capybara :: Poltergeist状态错误,无法到达服务器

Del*_*ine 7 rspec capybara poltergeist ruby-on-rails-4

我试图在我的Rails 4应用程序上使用Rspec/Capybara/Poltergeist进行一些测试,安装了Phantomjs(版本2.2.1),但我总是得到这个错误:

失败/错误:访问(perfect_landing_page_path)

水豚::骚灵:: StatusFailError:

请求' http://127.0.0.1:49623/path '无法访问服务器,检查DNS和/或服务器状态

我正在进行的测试:

require 'rails_helper'

RSpec.feature 'Subscription', :type => :feature do

  let!(:plan) { create(:plan) }
  let!(:landing_page) { create(:landing_page) }

  before(:each) { landing_page.default_plan = plan }

  describe 'landing_page#perfect_show' do
    scenario 'form display', js: true do
      plan_2 = create(:plan)
      plan_3 = create(:plan)
      landing_page.plans << plan_2
      landing_page.plans << plan_3
      visit(perfect_landing_page_path)
      expect(page).to have_css(".start-now", count: 3)
      first(".start-now").click
      expect(page).to have_css("#new_user")
    end

  end

end
Run Code Online (Sandbox Code Playgroud)

我的Gemfile看起来像这样:

  gem 'rspec-rails', '~> 3.0'
  gem 'factory_girl_rails'
  gem 'guard-rspec'

group :test do
  gem 'database_cleaner'
  gem 'capybara'
  gem 'capybara-screenshot'
  gem 'poltergeist'
  gem 'selenium-webdriver'
  gem 'shoulda-matchers', require: false
  gem 'show_me_the_cookies'
end
Run Code Online (Sandbox Code Playgroud)

我的spec/support/capybara.rb文件:

require 'capybara/rails'
require 'capybara/rspec'
require 'capybara-screenshot/rspec'

require "capybara/poltergeist" # Add this line to require poltergeist
require 'selenium-webdriver'

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, {:js_errors => false, :default_max_wait_time => 30, :timeout => 30, phantomjs_options: [
                             '--load-images=no',
                             '--ignore-ssl-errors=true',
                             '--ssl-protocol=any']})
end

Capybara.register_driver :poltergeist_debug do |app|
  Capybara::Poltergeist::Driver.new(app, :inspector => true)
end

Capybara.configure do |config|
  config.javascript_driver = :poltergeist
  config.ignore_hidden_elements = true
  config.default_max_wait_time = 30
end
Run Code Online (Sandbox Code Playgroud)

我的spec_helper.rb文件:

require 'capybara/rspec'

RSpec.configure do |config|

  config.expect_with :rspec do |expectations|
    expectations.include_chain_clauses_in_custom_matcher_descriptions = true
  end

  config.mock_with :rspec do |mocks|
    mocks.verify_partial_doubles = true
  end

  config.filter_run :focus
  config.run_all_when_everything_filtered = true
Run Code Online (Sandbox Code Playgroud)

之前有人遇到过这个问题吗?有人有解决方案吗?我几天来一直在网上喋喋不休......非常感谢你.

PS:它在我朋友的Mac(Yosemite或El Capitan)上工作得很好,就在我的朋友身上.

agb*_*ike 2

我遇到了同样的问题,这是由于第 3 方脚本超时造成的。您可以通过黑名单阻止加载第 3 方脚本。例如:

config.before(:each, js: true) do
  page.driver.browser.url_blacklist = ["http://use.typekit.net"]
end
Run Code Online (Sandbox Code Playgroud)

http://use.typekit.net将阻止为使用 js 驱动程序的每个测试调用任何以 开头的 URL 。更多信息请访问:

https://robots.thoughtbot.com/speed-up-javascript-capybara-specs-by-blacklisting-urls

或者,您可以使用白名单:

config.before(:each, js: true) do
  page.driver.browser.url_whitelist = ["127.0.0.1"]
end
Run Code Online (Sandbox Code Playgroud)

这将阻止所有不发送至 127.0.0.1 的请求

我将配置放入spec/feature_helper.rb以确保它仅针对功能规格进行设置。