2016-03-02 5 views
6

Я пытаюсь выполнить некоторые тесты с Rspec/Capybara/Poltergeist в моем приложении Rails 4, Phantomjs установлен (версия 2.2.1), но я всегда получаю эту ошибку:Capybara :: Poltergeist Ошибка состояния, не удалось связаться с сервером

Failure/Error: visit(perfect_landing_page_path)

Capybara::Poltergeist::StatusFailError:

Request to ' http://127.0.0.1:49623/path ' failed to reach server, check DNS and/or server status

тест я работаю над:

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 

Мои 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 

Мой спецификации файла/поддержка/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 

Мой 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 

ли кто-то столкнулись с этой проблемой раньше? У кого-нибудь есть решение для этого? Я несколько раз бил головой, глядя в Интернет ... Большое спасибо.

PS: он отлично работает на mac моего друга (Yosemite или El Capitan), только не на моем.

+0

Вы можете публиковать сообщения с полной ошибкой?То, что вы опубликовали, усечено и отсутствует самая важная часть (деталь ошибки). – agbodike

+0

Я обновил ответ, чтобы добавить альтернативу белым списком. – agbodike

ответ

1

У меня была такая же проблема, и это было связано с тайм-аутом стороннего сценария. Вы можете предотвратить загрузку сторонних скриптов с помощью черного списка. Например:

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

будет препятствовать любой URL, начиная с http://use.typekit.net от вызова для каждого теста, который использует драйвер Js. Более подробную информацию можно найти по адресу:

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 

, который будет блокировать все запросы не 127.0.0.1

Я поместил конфигурацию в spec/feature_helper.rb чтобы он был установлен только для спецификаций функций.

+0

Спасибо за ответ. Ошибка теперь появляется случайным образом ... но также верно, что тесты занимают очень много времени, и я попробовал ваш метод, но это ничего не меняло для меня. – Delphine

+0

Где бы вы выразили это заявление? – Trip

+0

У меня это в 'spec/feature_helper.rb' – agbodike

0

Вы можете избежать этого, предварительно сконфигурировав активы перед испытаниями. И код:

RSpec.configure do |config| 
    config.before :all do 
    ENV['PRECOMPILE_ASSETS'] ||= begin 
     case self.class.metadata[:type] 
     when :feature, :view 
     STDOUT.write "Precompiling assets..." 

     require 'rake' 
     Rails.application.load_tasks 
     Rake::Task['assets:precompile'].invoke 

     STDOUT.puts " done." 
     Time.now.to_s 
     end 
    end 
    end 
end 

more info

1

Я с этой проблемой в CI (CodeShip).

Добавление вызова bundle exec rake assets:precompile в конце команды установки, казалось, чтобы исправить это:

Настройка

CodeShip CI команды:

rvm use 2.3.4 --install 
bundle install 
export RAILS_ENV=test 
bundle exec rake db:schema:load 
bundle exec rake assets:precompile 

также белый список за @agbodike но в rails_helper.rb

config.before(:each, js: true) do 
    page.driver.browser.url_whitelist = ["127.0.0.1"] 
end 
Смежные вопросы