spec / rails_helper.rbとspec / spec_helper.rbの違いは何ですか?必要ですか?


88

Railsチュートリアルを2回目にします。これを入力すると

rails generate integration_test static_pages

私が取得spec/rails_helper.rbし、spec/spec_helper.rb代わりにちょうどspec/spec_helper.rb

テストを実行すると、前回実行したときよりも長く( "冗長")、遅くなります。2つのファイルの違いは何か、何か問題があったのかと思います。また、rails_helper.rbすべてを台無しにせずにファイルを取り除く方法はありますか?


以前に作成しなかったテスト製品の出力は何ですか?(新しい質問に属している可能性があります。)
Dave Schweisguth 14年

用語についてはわかりませんが、テストでは各gemを通過するため、理解できないことの長いリストが表示され、その結果だけが表示されます。以前は、結果が出ました。ここにコピーしますが、本当に長いです...
user3417583

おそらくRSpec 3の非推奨です。検索またはこのmyronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3からそれらを理解できない場合は、新しい質問に入力してください。
Dave Schweisguth 2014年

1
それは修正され、.rspecから--warningsを削除する必要がありました
user3417583

回答:


127

rspec-rails 3はspec_helper.rbおよびを生成しrails_helper.rbます。spec_helper.rbRailsに依存しない仕様(libディレクトリ内のクラスの仕様など)用です。rails_helper.rb(Railsプロジェクトでは、ほとんどまたはすべての)Railsに依存する仕様用です。rails_helper.rbが必要spec_helper.rbです。ですから、取り除かないでくださいrails_helper.rbspec_helper.rbあなたの仕様でそれを必要とする(そして必要としない)。

Railsに依存しない仕様に、Railsに依存しない仕様を強制し、それらを単独で実行するときに可能な限り高速に実行したい場合は、仕様ではspec_helper.rbなく要求することができますrails_helper.rb。しかし、それぞれのスペックファイルにヘルパーを必要と-r rails_helperするの.rspecではなく、非常に便利なので、これは一般的なアプローチになるはずです。

Springプリローダーを使用している場合、各クラスは1回だけロードする必要がありspec_helperSpringはを必要とする単一の仕様を実行するだけでも、クラスを熱心にロードしspec_helperます。

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


4
これは非常に混乱します。PRを追加して、rspec-railsのreadmeを更新して、ここにあるように詳しく説明します。説明ありがとう。
2016年

4
大きな混乱であるrspecを使い始める人にとっては!
エドゥアルド

1

すべての構成を常にspec_helperに組み合わせることができ、railsヘルパーファイルにspecヘルパーのみが必要です。

1日の終わりには手動でこの「リファクタリング」を行うため、これは決して「理想的な」ものではありませんが、本当に気になる場合は。それを完全にあなた次第です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.