spec / rails_helper.rb는 spec / spec_helper.rb와 어떻게 다릅니 까? 필요합니까?


89

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

rails generate integration_test static_pages

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

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


테스트 제품이 이전에 생산하지 않았던 출력은 무엇입니까? (새로운 질문에 속할 수 있습니다.)
데이브 Schweisguth에게

용어에 대해 잘 모르겠지만 이제 테스트는 각 gem을 통과하여 제가 이해하지 못하는 것들의 긴 목록을 제공하고 그 후에야 결과가 나타납니다. 전에는 결과를 얻었습니다. 여기에 복사 하겠지만 정말 깁니다 ...
user3417583

아마도 RSpec 3 지원 중단 일 것입니다. 검색이나 myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3 에서 찾을 수 없다면 새 질문에 넣으십시오.
Dave Schweisguth

1
이 고정 된 것, 나는 .rspec에서 --warnings을 제거했다
user3417583

답변:


128

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


4
이것은 매우 혼란 스럽습니다. 여기에있는 것처럼 rspec-rails readme를 업데이트하는 PR을 추가하겠습니다. 설명 해주셔서 감사합니다.
steve

4
rspec에서 시작하는 사람들에게는 큰 엉망입니다!
Eduardo

1

항상 모든 구성을 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.