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_examples
是 use_transactional_fixtures
的别名,因此指定两者没有意义。
我认为您的测试规范文件名应该是 specs/features/canvas_integration_spec.rb
而不是 specs/features/canvas_integration.rb
为什么?
rspec-rails
gem读取的文件是以_spec.rb
结尾的文件
我的项目中有一些功能规范大致如下所示:
# 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_examples
是 use_transactional_fixtures
的别名,因此指定两者没有意义。
我认为您的测试规范文件名应该是 specs/features/canvas_integration_spec.rb
而不是 specs/features/canvas_integration.rb
rspec-rails
gem读取的文件是以_spec.rb