【问题标题】:Integrate Capybara in SInatra app with rspec result always in 504 tests在 SInatra 应用程序中集成 Capybara 并始终在 504 次测试中使用 rspec 结果
【发布时间】:2016-07-20 10:37:21
【问题描述】:

我没有让 capybara 使用我的模块化 sinatra 应用程序。我创建了一个小型测试应用程序并遇到了同样的问题。我总是收到 504 超时错误,并且我认为 Capybara 并没有真正加载该应用程序,无论 accept_helper 中的 Capybara.app = Testapp 行。

浏览器 Firefox 会在测试运行时打开,但不会转到任何 URL,并且始终显示空白站点。

当我只使用 rspec 进行相同的测试时,它可以工作(第二个)。

我做错了什么?

我的设置:

OS: Win 7 Professional 64-bit
Ruby version: ruby 2.2.2p95 (2015-04-13 revision 50295) [x64-mingw32]
Firefox version: 40.0.3

gem versions
- sinatra (1.4.6)
- rspec (3.3.0)
- capybara (2.7.1)
- selenium-webdriver (2.53.4)
- thin (1.5.1)  
- rack (1.6.4)
- rack-test (0.6.3)  

应用结构:

test_sinatra_capybara
 |
 |- testapp.rb
 |- spec
 |    |- spec_helper.rb
 |    |- acceptance_helper.rb
 |    |- testapp_spec.rb
 |- views
 |    |- index.slim

testapp.rb

require 'sinatra'
require 'sinatra/base'
require 'slim'

class Testapp < Sinatra::Base
  get '/' do
    slim :index
  end
end

index.slim

#test-id
  | Willkommen

spec_helper.rb

require 'rspec'
require 'rack/test'
require_relative '../testapp'
Testapp.environment = :test

module RSpecMixin
  include Rack::Test::Methods
  def app() Testapp end
end

RSpec.configure do |config|
  config.include RSpecMixin
  # Use color in STDOUT
  config.color = true

  # Use the specified formatter
  config.formatter = :documentation

  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

end 

acceptance_helper.rb

require File.dirname(__FILE__) + '/spec_helper'

require 'capybara'
require 'capybara/rspec'

Capybara.default_driver = :selenium

Capybara.app = Testapp

RSpec.configure do |config|
  config.include Capybara::DSL
  config.include Capybara::RSpecMatchers
end

testapp_spec.rb

require File.dirname(__FILE__) + '/acceptance_helper'

describe 'URLs that require login' do
  it "start page capybara" do
    # I tried both
    visit '/'
    # visit 'http:localhost:4567'

    page.should have_content("Willkommen")
  end

  it "start page rspec" do
    get "/"

    expect(last_response.body).to include("Willkommen")
  end
end

正如我所说,最后一次测试正在运行:

Finished in 12.91 seconds (files took 2.54 seconds to load)
2 examples, 1 failure

Failed examples:

rspec ./spec/testapp_spec.rb:4 # URLs that require login start page capybara

第一次测试出错:

Selenium::WebDriver::Error::WebDriverError:
unexpected response, code=504, content-type="text/html"

【问题讨论】:

  • 如果您在visit 之后暂停测试,浏览器尝试连接的网址是什么?
  • 您对代理事项的权利。我忘了显示那个信息。但是 Localhost (127.0.0.1) 不应该受到影响。我手动禁用了它,但仍然无法正常工作。浏览器的窗口始终是空白的,因此水豚可以打开浏览器,但在我看来它无法访问任何 url。我目前的 FF 版本是 40.0.3,也许是我最后尝试这个的原因,因为在我看来它还不算旧。 Selenium gem 是 Capybara.server_* 配置的 2.53.4 Thx,我不知道,但它仍然失败。

标签: ruby rspec sinatra capybara


【解决方案1】:

运行发布的确切代码对我来说很好,我猜这意味着两件事之一。您使用的 Firefox 版本已过时(请确保您使用的是 47.0.1),或者您使用的机器有代理服务器或防火墙干扰对 127.0.0.1 的请求:。默认的 Capybara 配置在 127.0.0.1: 上启动服务器以处理对被测应用程序的请求。如果这些连接在其他地方被阻止或代理,它显然会阻止事情正常工作。如果您需要绑定到不同的接口或设置固定端口以绕过公司防火墙/代理限制,您可以通过设置 Capybara.server_host 和 Capybara.server_port 来做到这一点

【讨论】:

  • 这与我的设置中的一些非常奇怪的东西有关。我已经安装了 babun (cygwin) 并从那时起一直在运行测试。当我在 Windows 的普通 cmd 中执行此操作时,它的工作原理...为什么,但它现在对我来说是一个解决方案。无论如何,我都会给你正确的答案,因为我的设置被破坏了,你的回答给了我一些新的信息,我可以做一些新的信息来设置水豚。谢了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
相关资源
最近更新 更多