[ruby-on-rails] spec / rails_helper.rb는 spec / spec_helper.rb와 어떻게 다릅니 까? 필요합니까?

Rails Tutorial을 두 번째로하고 있습니다. 내가 이것을 입력하면

rails generate integration_test static_pages

내가 얻을 spec/rails_helper.rbspec/spec_helper.rb대신의spec/spec_helper.rb

이제 테스트를 실행하면 지난번에 수행했을 때보 다 더 길고 (더 “상세”) 느립니다. 두 파일의 차이점이 무엇인지, 내가 뭔가 잘못했는지 궁금합니다. 또한 rails_helper.rb모든 것을 엉망으로 만들지 않고 파일을 제거하는 방법이 있습니까?



답변

rspec-rails 3은 spec_helper.rbrails_helper.rb. spec_helper.rbRails에 의존하지 않는 사양 (예 : lib 디렉토리의 클래스 사양)을위한 것입니다. rails_helper.rbRails에 의존하는 사양을위한 것입니다 (Rails 프로젝트에서 대부분 또는 전부). rails_helper.rb필요합니다 spec_helper.rb. 그래서 아니, 제거하지 마십시오 rails_helper.rb; spec_helper.rb사양에서 필요하지 않습니다 .

당신은 당신이 스스로를 실행할 때이 아닌 레일에 의존하는 사양가 그들이있는 거 아닌 레일 의존 시행하고, 가능한 한 빨리 실행하려면, 당신은 요구할 수 spec_helper.rb보다는 rails_helper.rb그이다. 그러나 각 사양 파일에서 하나의 도우미를 요구하는 것보다 -r rails_helper사용자 에게 매우 편리 .rspec하므로 널리 사용되는 접근 방식이 될 것입니다.

스프링 프리 로더를 사용하는 경우 각 클래스는 한 번만로드하면되며, 을 요구하는 단일 사양 만 실행하더라도 스프링은 클래스를 열심히로드spec_helper 하므로 spec_helper일부 파일 에서만 요구하는 것만 큼 가치가 없습니다 .

출처 : https://www.relishapp.com/rspec/rspec-rails/docs/upgrade#default-helper-files


답변

항상 모든 구성을 spec_helper에 결합 할 수 있으며 rails 도우미 파일에 사양 도우미 만 필요합니다.

하루가 끝날 때이 “리팩터링”을 수동으로 수행하기 때문에 “이상적인”것은 아닙니다. 구조화하는 방법은 전적으로 귀하에게 달려 있습니다.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


답변