Rails 5.1: Rspec 看不到水豚的特征

Rails 5.1: Rspec can't see Capybara features

我的项目中有一些功能规范大致如下所示:

# specs/features/canvas_integration.rb
require 'spec_helper'

feature 'Routes to default page' do
  let!(:mode) { create(:mode) }

  scenario 'as anyone' do
    visit root_path
    expect(page).to have_content('Your home')
  end
end

但是 运行 规格没有结果:

rspec spec/features
No examples found.

我的 spec_helper.rb 看起来像这样:

# frozen_string_literal: true

require 'simplecov'
SimpleCov.start 'rails'
require File.expand_path('../../config/environment', __FILE__)
require 'codeclimate-test-reporter'
require 'rspec/rails'
require 'webmock/rspec'
require 'devise'
require 'codeship'
require 'capybara/rspec'
require 'capybara/rails'

WebMock.disable_net_connect!(allow_localhost: true)
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }

RSpec.configure do |config|
  config.include Devise::Test::ControllerHelpers, type: :controller
  config.include Devise::Test::ControllerHelpers, type: :view
  config.include FactoryGirl::Syntax::Methods
  config.extend ControllerMacros, type: :controller
  config.include Macros

  config.color = true
  config.fixture_path = "#{::Rails.root}/spec/factories/fixtures"
  config.infer_spec_type_from_file_location!
  config.infer_base_class_for_anonymous_controllers = false
  config.order = 'random'
  config.warnings = false
  config.default_formatter = 'doc' if config.files_to_run.one?
  config.profile_examples = 10
  config.use_transactional_examples = false
  config.use_transactional_fixtures = false

  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with(:truncation)
  end

  # config.before(:each, type: :system) { driven_by :rack_test }

  config.mock_with :rspec do |mocks|
    mocks.verify_doubled_constant_names = true
  end

  config.expect_with :rspec do |c|
    c.syntax = :expect
  end
end

为什么 Rspec 找不到我的特征?

您的文件需要以 _spec.rb 结尾,以便 RSpec 在指定目录时加载它们。所以重命名为 specs/features/canvas_integration_spec.rb

另请注意,在 Rails 5.1 中,数据库清理器可能不是必需的(如果您使用的是常用数据库之一)- 因此您应该能够 remove/comment 删除并重新-启用事务测试。此外,use_transactional_examplesuse_transactional_fixtures 的别名,因此指定两者没有意义。

我认为您的测试规范文件名应该是 specs/features/canvas_integration_spec.rb 而不是 specs/features/canvas_integration.rb

为什么?

rspec-railsgem读取的文件是以_spec.rb

结尾的文件