将 Capybara 集成到 SInatra 应用程序中,rspec 结果总是在 504 次测试中
Integrate Capybara in SInatra app with rspec result always in 504 tests
我没有让水豚使用我的模块化 sinatra 应用程序。我创建了一个小型测试应用程序并遇到了同样的问题。我总是收到 504 超时错误,而且我认为无论 acceptance_helper.
中的行 Capybara.app = Testapp
是什么,我认为该应用程序并没有真正被 Capybara 加载
当测试为 运行 时,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"
运行 发布的确切代码对我来说工作正常,我猜这意味着两件事之一。您使用的 Firefox 版本已过时(确保您使用的是 47.0.1),或者您使用的机器上有代理服务器或防火墙干扰对 127.0.0.1 的请求:<一些随机端口>。默认的 Capybara 配置在 127.0.0.1: 上启动一个服务器来处理对被测应用程序的请求。如果这些连接在别处被阻止或代理,显然会阻止事情正常工作。如果您需要绑定到不同的接口或设置固定端口以绕过公司 firewall/proxy 限制,您可以通过设置 Capybara.server_host 和 Capybara.server_port
来实现
我没有让水豚使用我的模块化 sinatra 应用程序。我创建了一个小型测试应用程序并遇到了同样的问题。我总是收到 504 超时错误,而且我认为无论 acceptance_helper.
中的行Capybara.app = Testapp
是什么,我认为该应用程序并没有真正被 Capybara 加载
当测试为 运行 时,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"
运行 发布的确切代码对我来说工作正常,我猜这意味着两件事之一。您使用的 Firefox 版本已过时(确保您使用的是 47.0.1),或者您使用的机器上有代理服务器或防火墙干扰对 127.0.0.1 的请求:<一些随机端口>。默认的 Capybara 配置在 127.0.0.1: