Ruby on rails Rails Poltergeist/PhantomJS未呈现www.example.com 背景

Ruby on rails Rails Poltergeist/PhantomJS未呈现www.example.com 背景,ruby-on-rails,ruby-on-rails-4,phantomjs,poltergeist,Ruby On Rails,Ruby On Rails 4,Phantomjs,Poltergeist,下面是test/integration/projects\u test.rb。我们要求登录用户访问项目\u url setup do ... login_as @user ... end # PARTIAL SUCCESS (RENDERS LOGIN PAGE (instead of projects), IGNORES LOGGED IN @USER) test "can visit projects" do visit "http://127.0.0.1:3000/pro

下面是
test/integration/projects\u test.rb
。我们要求登录用户访问
项目\u url

setup do
  ...
  login_as @user
  ...
end

# PARTIAL SUCCESS (RENDERS LOGIN PAGE (instead of projects), IGNORES LOGGED IN @USER)
test "can visit projects" do
  visit "http://127.0.0.1:3000/projects"
  page.save_screenshot
end

# FAILURE (BLANK PAGE)
test "can visit projects_url" do
  visit projects_url
  page.save_screenshot
end
当我激活调试消息时,它会显示发生了什么:

  • login\u as@user
    正在登录www.example.com
  • 访问”http://127.0.0.1:3000/projects“
    呈现一个页面,但它不会进入
    www.example.com
    ,因此我们的
    @user
    不会被识别为已登录
  • visit projects\u url
    将进入
    www.example.com/projects
    ,Poltergeist/PhantomJS将其呈现为空白
  • 问题: 那么,我该如何:

    • 让Poltergeist/PhantomJS在
      www.example.com
      上呈现页面
    • 将所有内容移到127.0.0.1:3000

    资源 test_helper.rb的内容:

    ENV['RAILS_ENV'] ||= 'test'
    require File.expand_path('../../config/environment', __FILE__)
    require 'rails/test_help'
    require 'capybara/rails'
    
    class ActiveSupport::TestCase
      fixtures :all
    
      require 'minitest/reporters'
      Minitest::Reporters.use!
    
      Capybara.default_driver = :rack_test
    
      include Warden::Test::Helpers   # Help with logging in and out.
    end
    
    
    class ActionController::TestCase
      include Devise::TestHelpers
    end
    
    
    class ActionDispatch::IntegrationTest
      include Capybara::DSL
    
      require 'capybara/poltergeist'
      Capybara.register_driver(:poltergeist) do |app|
        Capybara::Poltergeist::Driver.new(app, {
          js_errors: false,
          timeout: 10,
          phantomjs_options: ['--load-images=no', '--ignore-ssl-errors=yes', '--ssl-protocol=TLSv1'],
          url_whitelist: ["127.0.0.1", "localhost"]
        })
      end
      Capybara.javascript_driver = :poltergeist
    end
    
    Gemfile

    group :development, :test do
      gem 'minitest-rails-capybara'
      gem 'poltergeist'
      gem 'minitest-reporters'
      gem 'launchy'
      gem 'simplecov', require: false
    end
    
    版本

    ruby 2.3.1
    rails 4.2.7
    capybara 2.14.0
    poltergeist 1.15.0
    launchy 2.4.2
    simplecov 0.14.1
    

    请求 将Poltergeist设置为
    url\u白名单:['127.0.0.1','localhost','example.com']

    使用
    访问根路径运行测试

    结果:

    http://www.example.com/{"id":"1d9f77e2-c637-4097-bfa0-072f4371fcf6","name":"set_js_errors","args":[false]}
    {"command_id":"1d9f77e2-c637-4097-bfa0-072f4371fcf6","response":true}
    {"id":"983f046e-450a-4dcc-95f7-7f08caf1f059","name":"set_debug","args":[true]}
    {"command_id":"983f046e-450a-4dcc-95f7-7f08caf1f059","response":true}
    {"id":"e23a646a-fe9f-4e00-8d8b-dacce27d8c0e","name":"set_url_whitelist","args":["127.0.0.1","localhost","example.com"]}
    {"command_id":"e23a646a-fe9f-4e00-8d8b-dacce27d8c0e","response":true}
    {"id":"67d19849-60dc-4cbb-95d3-fef0e388fe2a","name":"visit","args":["http://127.0.0.1:52788/"]}
    {"command_id":"67d19849-60dc-4cbb-95d3-fef0e388fe2a","error":{"name":"Poltergeist.StatusFailError","args":["http://127.0.0.1:52788/","Timed out with no open resource requests"]}}
    ERROR["test_basic_poltergeist_test", ProjectsTest, 11.084383999999773]
     test_basic_poltergeist_test#ProjectsTest (11.08s)
    Capybara::Poltergeist::StatusFailError:         Capybara::Poltergeist::StatusFailError: Request to 'http://127.0.0.1:52788/' failed to reach server, check DNS and/or server status - Timed out with no open resource requests
                poltergeist (1.15.0) lib/capybara/poltergeist/browser.rb:377:in `command'
                poltergeist (1.15.0) lib/capybara/poltergeist/browser.rb:36:in `visit'
                poltergeist (1.15.0) lib/capybara/poltergeist/driver.rb:97:in `visit'
                capybara (2.14.0) lib/capybara/session.rb:269:in `visit'
                capybara (2.14.0) lib/capybara/dsl.rb:50:in `block (2 levels) in <module:DSL>'
                test/integration/projects_test.rb:41:in `block in <class:ProjectsTest>'
                minitest (5.9.0) lib/minitest/test.rb:107:in `block (3 levels) in run'
                minitest (5.9.0) lib/minitest/test.rb:204:in `capture_exceptions'
                minitest (5.9.0) lib/minitest/test.rb:104:in `block (2 levels) in run'
                minitest (5.9.0) lib/minitest/test.rb:255:in `time_it'
                minitest (5.9.0) lib/minitest/test.rb:103:in `block in run'
                minitest (5.9.0) lib/minitest.rb:348:in `on_signal'
                minitest (5.9.0) lib/minitest/test.rb:275:in `with_info_handler'
                minitest (5.9.0) lib/minitest/test.rb:102:in `run'
                minitest-reporters (1.1.14) lib/minitest/reporters.rb:48:in `run_with_hooks'
                minitest (5.9.0) lib/minitest.rb:799:in `run_one_method'
                minitest (5.9.0) lib/minitest.rb:322:in `run_one_method'
                minitest (5.9.0) lib/minitest.rb:310:in `block (2 levels) in run'
                minitest (5.9.0) lib/minitest.rb:309:in `each'
                minitest (5.9.0) lib/minitest.rb:309:in `block in run'
                minitest (5.9.0) lib/minitest.rb:348:in `on_signal'
                minitest (5.9.0) lib/minitest.rb:335:in `with_info_handler'
                minitest (5.9.0) lib/minitest.rb:308:in `run'
                minitest (5.9.0) lib/minitest.rb:158:in `block in __run'
                minitest (5.9.0) lib/minitest.rb:158:in `map'
                minitest (5.9.0) lib/minitest.rb:158:in `__run'
                minitest (5.9.0) lib/minitest.rb:135:in `run'
                minitest (5.9.0) lib/minitest.rb:62:in `block in autorun'
    
    如果您希望允许页面请求访问该url,则需要在Poltergeist白名单中允许“”


    此外,
    http://127.0.0.1:3000
    很可能是您的开发实例,因此您不希望测试命中它,因为它不会使用您设置的测试数据。

    我尝试过这样做(将
    url\u whitelist
    to'),现在我从项目中得到了胡言乱语。看起来像是'¾ïWïri]÷S×V@1kÜÕZ'$6÷qÛ½ååí@+Ž381; lžI“üsPzUeèäñ‡B”。@sscirrus查看您的test.log,查看发出了什么请求以及响应呈现了什么,我还假设您将
    url\u白名单设置为一个包含“example.com”的数组,而不仅仅是我仍在调查的“example.com”,而是test.log中的一些查询以
    回滚
    (我的本地服务器处理得很好)。我尝试使用
    root\u path
    root\u url
    -
    root\u url
    将我带到example.com而不是我的root。
    root\u path
    为空。对于第二个问题,我确认我正在使用数组作为
    url\u白名单
    。设置你的poltergeist
    url\u白名单=['127.0.0.1'、'localhost'、'example.com']
    然后尝试使用'root\u path
    /
    projects\u path`而不是xxx\u url运行-如果不起作用,请将test.log添加到问题中。另外,您是否确定您的测试实际上使用的是poltergeist,而不仅仅是使用rack\u测试驱动程序(完全忽略域),并且
    www.example.com
    是否在您的机器上解析为
    127.0.0.1
    ?我刚刚添加了该测试的结果。
      Rendered shared/_searchBox.html.erb (0.2ms)
      Rendered projects/index.html.erb within layouts/application (7.4ms)
      Rendered layouts/_google_analytics.js.erb (0.4ms)
    Completed 200 OK in 50ms (Views: 20.3ms | ActiveRecord: 2.3ms)
    Started GET "/assets/application.css" for 127.0.0.1 at 2017-05-03 19:43:06 -0400
    Started GET "/assets/application.js" for 127.0.0.1 at 2017-05-03 19:43:06 -0400