Я уже второй раз занимаюсь Rails Tutorial. Когда я вхожу в это
rails generate integration_test static_pages
Я получаю spec/rails_helper.rb
и spec/spec_helper.rb
вместо простоspec/spec_helper.rb
Теперь, когда я запускаю свои тесты, они длиннее (более «подробны») и медленнее, чем когда я делал это в прошлый раз. Мне интересно, в чем разница между двумя файлами, и сделал ли я что-то не так. Кроме того, есть ли способ избавиться от rails_helper.rb
файла, не испортив все проблемы?
ruby-on-rails
testing
rspec
rspec-rails
rspec3
пользователь3417583
источник
источник
Ответы:
rspec-rails 3 генерирует
spec_helper.rb
иrails_helper.rb
.spec_helper.rb
предназначен для спецификаций, которые не зависят от Rails (например, для спецификаций классов в каталоге lib).rails_helper.rb
предназначен для спецификаций, которые зависят от Rails (в проекте Rails, большинство или все из них).rails_helper.rb
требуетspec_helper.rb
. Так что нет, не избавляйтесь отrails_helper.rb
; требуется (а неspec_helper.rb
) в ваших спецификациях.Если вы хотите, чтобы ваши спецификации, не зависящие от Rails, обеспечивали независимость от Rails, и чтобы они работали как можно быстрее, когда вы запускаете их сами по себе, вы можете потребовать,
spec_helper.rb
а неrails_helper.rb
в них. Но это очень удобно-r rails_helper
в вашем ,.rspec
а не требовать одного помощника или другой в каждом файле спецификации, так что обязательно будет популярным подходом.Если вы используете предварительный загрузчик spring, каждый класс нужно загружать только один раз, а Spring загружает классы с нетерпением, даже если вы запускаете только одну спецификацию, которая требует
spec_helper
, поэтому не так много смысла требовать толькоspec_helper
в некоторых файлах.Источник: https://www.relishapp.com/rspec/rspec-rails/docs/upgrade#default-helper-files
источник
Вы всегда можете объединить все свои конфиги в spec_helper и потребовать только вспомогательного специалиста в файле rails helper.
Это ни в коем случае не «идеально», поскольку в конце концов вы вручную выполняете этот «рефакторинг», но ЕСЛИ это действительно вас беспокоит. просто знайте, что это полностью зависит от вас, как структурировать
Rspec.configure
#rails_helper.rb require 'spec_helper' #EMPTY FILE
и просто введите все настройки рельсов в
# spec_helper.rb # This file is copied to spec/ when you run 'rails generate rspec:install' require 'spec_helper' ENV['RAILS_ENV'] ||= 'test' require File.expand_path('../config/environment', __dir__) # Prevent database truncation if the environment is production abort("The Rails environment is running in production mode!") if Rails.env.production? require 'rspec/rails' # Add additional requires below this line. Rails is not loaded until this point! # Requires supporting ruby files with custom matchers and macros, etc, in # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are # run as spec files by default. This means that files in spec/support that end # in _spec.rb will both be required and run as specs, causing the specs to be # run twice. It is recommended that you do not name files matching this glob to # end with _spec.rb. You can configure this pattern with the --pattern # option on the command line or in ~/.rspec, .rspec or `.rspec-local`. # # The following line is provided for convenience purposes. It has the downside # of increasing the boot-up time by auto-requiring all files in the support # directory. Alternatively, in the individual `*_spec.rb` files, manually # require only the support files necessary. # # Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } # Checks for pending migrations and applies them before tests are run. # If you are not using ActiveRecord, you can remove these lines. begin ActiveRecord::Migration.maintain_test_schema! rescue ActiveRecord::PendingMigrationError => e puts e.to_s.strip exit 1 end RSpec.configure do |config| ... all our config.whatever_your_heart_desires
источник