rack-test需要一个rack应用程序,但没有提供。

3
使用Rails、Capybara、Rspec(以及Spring)运行特性测试时,我遇到了以下错误:
> rspec spec/features/home_page_spec.rb

错误:

ArgumentError:
       rack-test requires a rack application, but none was given
     # /Users/Will/.rvm/gems/ruby-2.0.0-p481@railstutorial_rails_4_0/gems/capybara-2.4.4/lib/capybara/rack_test/driver.rb:16:in `initialize'
     # /Users/Will/.rvm/gems/ruby-2.0.0-p481@railstutorial_rails_4_0/gems/capybara-2.4.4/lib/capybara.rb:372:in `new'
     # /Users/Will/.rvm/gems/ruby-2.0.0-p481@railstutorial_rails_4_0/gems/capybara-2.4.4/lib/capybara.rb:372:in `block in <top (required)>'
     # /Users/Will/.rvm/gems/ruby-2.0.0-p481@railstutorial_rails_4_0/gems/capybara-2.4.4/lib/capybara/session.rb:79:in `call'
     # /Users/Will/.rvm/gems/ruby-2.0.0-p481@railstutorial_rails_4_0/gems/capybara-2.4.4/lib/capybara/session.rb:79:in `driver'
     # /Users/Will/.rvm/gems/ruby-2.0.0-p481@railstutorial_rails_4_0/gems/capybara-2.4.4/lib/capybara/session.rb:227:in `visit'
     # /Users/Will/.rvm/gems/ruby-2.0.0-p481@railstutorial_rails_4_0/gems/capybara-2.4.4/lib/capybara/dsl.rb:51:in `block (2 levels) in <module:DSL>'
     # ./spec/features/home_page_spec.rb:22:in `block (2 levels) in <top (required)>'

例子测试错误:

Randomized with seed 4806

visitor

An error occurred in an after hook
    ArgumentError: rack-test requires a rack application, but none was given
    occurred at /Users/Will/.rvm/gems/ruby-2.0.0-p481@railstutorial_rails_4_0/gems/capybara-2.4.4/lib/capybara/rack_test/driver.rb:16:in `initialize'

  visits homepage (FAILED - 1)

如果有用的话,这是我的Gemfile:

group :development, :test do
  gem 'rspec-rails'
  gem 'factory_girl_rails'
  gem 'faker'
  gem 'capybara'
  gem 'spring',      '1.1.3'
end

如果有帮助的话,可以使用spec_helper:

require 'devise'
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.include Capybara::DSL

  config.filter_run :focus
  config.run_all_when_everything_filtered = true

  if config.files_to_run.one?
    config.default_formatter = 'doc'
  end
  config.profile_examples = 10
  config.order = :random

  Kernel.srand config.seed
end

我的rails_helper:

ENV['RAILS_ENV'] ||= 'test'
require 'spec_helper'
require File.expand_path('../../config/environment', __FILE__)
require 'rspec/rails'

# Add additional requires below this line. Rails is not loaded until this point!
require 'capybara/rails'

ActiveRecord::Migration.check_pending!

RSpec.configure do |config|
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

  config.use_transactional_fixtures = true
  config.include Devise::TestHelpers, :type => :controller


  config.infer_spec_type_from_file_location!
end

UPD home_page_spec.rb:

require 'spec_helper'

feature "visitor" do

  # describe 'on desktop' do

    scenario 'visits homepage' do

      visit '/'

      expect(page).to have_content('Drivers')

    end

    scenario 'visits employer page' do
      visit '/hire'
      expect(page).to have_content('DriverHunt')
    end

    scenario 'visits contact page' do

      visit '/contact'

      expect(page).to have_content('DriverHunt')

    end

    scenario 'visits terms' do

      visit '/terms'

      expect(page).to have_content('DriverHunt')

    end

    scenario 'visits privacy' do

      visit '/privacy'

      expect(page).to have_content('DriverHunt')

    end

  # end


  # describe 'on mobile' do

  #   scenario 'visits homepage' do
  #     visit '/?mobile=1'
  #     expect(page).to have_content('Drivers')
  #   end

  #   scenario 'visits employer page' do
  #     visit '/hire?mobile=1'
  #     expect(page).to have_content('DriverHunt')
  #   end

  #   scenario 'visits contact page' do

  #     visit '/contact?mobile=1'

  #     expect(page).to have_content('DriverHunt')

  #   end

  #   scenario 'visits terms' do

  #     visit '/terms?mobile=1'

  #     expect(page).to have_content('DriverHunt')

  #   end

  #   scenario 'visits privacy' do

  #     visit '/privacy?mobile=1'

  #     expect(page).to have_content('DriverHunt')

  #   end

  # end


end

# #   before :each do
# #     User.make(:email => 'user@example.com', :password => 'password')
# #   end

#   # it "signs me in" do
# #     visit '/sessions/new'
# #     within("#session") do
# #       fill_in 'Email', :with => 'user@example.com'
# #       fill_in 'Password', :with => 'password'
# #     end
# #     click_button 'Sign in'
# #     expect(page).to have_content 'Success'
# #   end

#   it "finds the homepage" do
#     visit '/'
#     expect(page).to have_content 'Driverdasdasd'
#   end

2
你在 spec/features/home_page_spec.rb 文件中是否已经 require 'rails_helper' 了? - number5
请发布 spec/features/home_page_spec.rb 的内容。 - Roman Kiselenko
已添加!填充物填充物。 - Will Taylor
@number5 不是的。刚刚添加了它,已经修复了。 - Will Taylor
1个回答

0

尝试:

cd spec
rspec features/home_page_spec.rb

这岂不意味着相对路径是错误的,您无法加载spec_helper? - beckah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接