2016-03-02 15 views
6

Tôi đang cố gắng thực hiện một số thử nghiệm với Rspec/Capybara/Poltergeist trên ứng dụng Rails 4 của tôi, Phantomjs được cài đặt (phiên bản 2.2.1), nhưng tôi luôn gặp lỗi này:Capybara :: Lỗi trạng thái Poltergeist, không đạt được máy chủ

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

Xét nghiệm này tôi đang làm việc trên:

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 

My Gemfile trông như thế này:

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 

đặc tả của tôi tập tin/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 

spec_helper.rb My file:

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 

Có ai gặp phải vấn đề này trước đây chưa? Có ai có một giải pháp cho điều này ? Tôi đã đập đầu mình trong nhiều ngày tìm kiếm trên web ... Cảm ơn bạn rất nhiều.

PS: nó hoạt động tốt trên mac của bạn tôi (Yosemite hoặc El Capitan), không phải của tôi.

+0

Bạn có thể đăng thông báo lỗi đầy đủ không?Những gì bạn đã đăng bị cắt ngắn và thiếu phần quan trọng nhất (chi tiết lỗi) – agbodike

+0

Tôi đã cập nhật câu trả lời để thêm một danh sách trắng thay thế – agbodike

Trả lời

1

Tôi gặp vấn đề tương tự và do thời gian của nhóm thứ ba hết thời gian chờ. Bạn có thể ngăn tải các tập lệnh của bên thứ ba bằng danh sách đen. Ví dụ:

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

sẽ ngăn mọi URL bắt đầu bằng http://use.typekit.net khỏi bị gọi cho mỗi thử nghiệm sử dụng trình điều khiển js. Thông tin chi tiết có thể được tìm thấy tại địa chỉ:

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

Hoặc bạn có thể sử dụng một danh sách trắng:

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

đó sẽ chặn tất cả các yêu cầu không để 127.0.0.1

tôi đặt cấu hình trong spec/feature_helper.rb để đảm bảo nó chỉ được đặt cho thông số kỹ thuật.

+0

Cảm ơn bạn đã trả lời. Lỗi thực sự xuất hiện ngẫu nhiên ngay bây giờ ... nhưng cũng đúng là các thử nghiệm mất nhiều thời gian để chạy, và tôi đã thử phương pháp của bạn, nhưng nó không thay đổi bất cứ điều gì đối với tôi. – Delphine

+0

Bạn sẽ đặt tuyên bố đó ở đâu? – Trip

+0

Tôi có nó trong 'spec/feature_helper.rb' – agbodike

0

Bạn có thể tránh những điều này bằng cách biên dịch trước các tài sản trước khi kiểm tra. Và mã là:

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

Tôi đã có vấn đề này trong CI (CodeShip).

Thêm một cuộc gọi đến bundle exec rake assets:precompile ở phần cuối của các lệnh thiết lập dường như để sửa chữa nó:

CodeShip CI Cài đặt lệnh:

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

Cũng đã có một danh sách trắng mỗi @agbodike nhưng trong rails_helper.rb

config.before(:each, js: true) do 
    page.driver.browser.url_whitelist = ["127.0.0.1"] 
end 
Các vấn đề liên quan