【问题标题】:Sinatra rspec capybara: "rack test requires a rack application"Sinatra rspec capybara:“机架测试需要机架应用程序”
【发布时间】:2016-02-03 10:37:24
【问题描述】:

当运行 rspec 以使用 Sinatra Base 测试功能测试时,我们收到以下错误。

这就是我们的功能测试的样子

require 'capybara/rspec'

    feature 'Enter names' do
      scenario 'submitting names' do
      visit('/')
      fill_in :player_1_name, with: 'Dave'
      fill_in :player_2_name, with: 'Mittens'
      click_button 'Submit'
      expect(page).to have_content 'Dave vs. Mittens'
      end
      end

这是我们的 Gemfile:

source 'https://rubygems.org'
 gem 'sinatra'
 gem 'rspec-sinatra'
 gem 'capybara'

错误:

 1.1) Failure/Error: visit "/"
      ArgumentError:
        rack-test requires a rack application, but none was given
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara/rack_test/driver.rb:16:in `initialize'
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara.rb:372:in `new'
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara.rb:372:in `block in <top (required)>'
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara/session.rb:79:in `call'
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara/session.rb:79:in `driver'
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara/session.rb:227:in `visit'
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara/dsl.rb:51:in `block (2 levels) in <module:DSL>'
      # ./spec/feature/feature_spec.rb:5:in `block (2 levels) in <top (required)>'

 1.2) Failure/Error: Unable to find matching line from backtrace
      ArgumentError:
        rack-test requires a rack application, but none was given
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara/rack_test/driver.rb:16:in `initialize'
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara.rb:372:in `new'
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara.rb:372:in `block in <top (required)>'
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara/session.rb:79:in `call'
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara/session.rb:79:in `driver'
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara/session.rb:103:in `reset!'
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara.rb:257:in `block in reset_sessions!'
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara.rb:257:in `each'
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara.rb:257:in `reset_sessions!'
      # /Users/Russell/.rvm/gems/ruby-2.2.3/gems/capybara-2.4.4/lib/capybara/rspec.rb:20:in `block (2 levels) in <top (required)>'

我们尝试在我们的功能测试中需要 spec_helper 文件,并且在功能测试中也需要我们的 app.rb,我们得到一个不同的错误,说它无法加载 sinatra-base

Here is our spec_helper 

ENV['RACK_ENV'] = 'test'

require File.join(File.dirname(__FILE__), '..', 'app.rb')

require 'capybara'
require 'capybara/rspec'
require 'rspec'

Capybara.app = Battle

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

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

我们将不胜感激任何方向。

谢谢

罗斯

【问题讨论】:

  • 您正在创建自己的会话吗?如果是这样,您是否将您的应用程序传递给它 -Capybara::Session.new(:rack_test, Battle) - Capybara.app 仅在您让 Capybara 管理会话时使用

标签: ruby rspec sinatra capybara


【解决方案1】:

看看这里: http://recipes.sinatrarb.com/p/testing/rspec

它建议将以下内容添加到您的spec_helper.rb

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

RSpec.configure do |config| 
  config.include RSpecMixin 
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2011-01-27
    • 2012-03-14
    • 1970-01-01
    相关资源
    最近更新 更多