Rails Tutorial을 두 번째로하고 있습니다. 내가 이것을 입력하면
rails generate integration_test static_pages
내가 얻을 spec/rails_helper.rb
과 spec/spec_helper.rb
대신의spec/spec_helper.rb
이제 테스트를 실행하면 지난번에 수행했을 때보 다 더 길고 (더 “상세”) 느립니다. 두 파일의 차이점이 무엇인지, 내가 뭔가 잘못했는지 궁금합니다. 또한 rails_helper.rb
모든 것을 엉망으로 만들지 않고 파일을 제거하는 방법이 있습니까?
답변
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
사양에서 필요하지 않습니다 .
당신은 당신이 스스로를 실행할 때이 아닌 레일에 의존하는 사양가 그들이있는 거 아닌 레일 의존 시행하고, 가능한 한 빨리 실행하려면, 당신은 요구할 수 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