Apa perbedaan spec / rails_helper.rb dari spec / spec_helper.rb? Apakah saya membutuhkannya?

89

Saya melakukan Tutorial Rails untuk kedua kalinya. Saat saya masuk ini

rails generate integration_test static_pages

Saya mendapatkan spec/rails_helper.rbdan spec/spec_helper.rbbukannya hanyaspec/spec_helper.rb

Sekarang ketika saya menjalankan pengujian saya, mereka lebih lama (lebih "bertele-tele") dan lebih lambat daripada saat saya melakukannya terakhir kali. Saya bertanya-tanya apa perbedaan antara kedua file tersebut, dan apakah saya melakukan kesalahan. Juga, apakah ada cara untuk menyingkirkan rails_helper.rbfile tanpa mengacaukan semuanya?

pengguna3417583
sumber
Output apa yang dihasilkan produk uji Anda yang tidak mereka hasilkan sebelumnya? (Mungkin termasuk dalam pertanyaan baru.)
Dave Schweisguth
Saya tidak yakin tentang terminologinya, tetapi sekarang pengujian melewati setiap permata yang memberi saya daftar panjang hal-hal yang tidak saya mengerti, dan baru kemudian hasilnya muncul. Sebelumnya, itu hanya memberi hasil. Saya akan menyalinnya di sini tetapi sangat panjang ...
user3417583
Ini mungkin penghentian RSpec 3. Jika Anda tidak dapat menemukannya dari penelusuran atau dari myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3 ini , tempatkan mereka di pertanyaan baru.
Dave Schweisguth
1
sudah diperbaiki, saya harus menghapus --warnings dari .rspec
user3417583

Jawaban:

128

rspec-rails 3 menghasilkan spec_helper.rbdan rails_helper.rb. spec_helper.rbadalah untuk spesifikasi yang tidak bergantung pada Rails (seperti spesifikasi untuk kelas di direktori lib). rails_helper.rbadalah untuk spesifikasi yang bergantung pada Rails (dalam proyek Rails, sebagian besar atau semuanya). rails_helper.rbmembutuhkan spec_helper.rb. Jadi tidak, jangan singkirkan rails_helper.rb; membutuhkannya (dan tidak spec_helper.rb) dalam spesifikasi Anda.

Jika Anda ingin spesifikasi yang tidak bergantung pada Rails memaksakan bahwa mereka tidak bergantung pada Rails, dan untuk bekerja secepat mungkin saat Anda menjalankannya sendiri, Anda dapat meminta spec_helper.rbdaripada rails_helper.rbdi dalamnya . Tapi itu sangat nyaman untuk -r rails_helperAnda .rspecdaripada membutuhkan satu helper atau lainnya di setiap file spesifikasi, jadi itu pasti akan menjadi pendekatan yang populer.

Jika Anda menggunakan prapemuat pegas, setiap kelas hanya perlu dimuat satu kali, dan pegas memuat kelas dengan penuh semangat meskipun Anda hanya menjalankan satu spesifikasi yang memerlukanspec_helper , jadi tidak ada nilai yang cukup jika hanya memerlukan spec_helperdi beberapa file.

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

Dave Schweisguth
sumber
4
Ini sangat membingungkan. Saya akan menambahkan PR untuk memperbarui rspec-rails readme untuk mengejanya seperti yang Anda lakukan di sini. Terima kasih untuk penjelasannya.
steve
4
Bagi orang-orang yang memulai dengan rspec itu adalah kekacauan besar!
Eduardo
1

Anda selalu dapat menggabungkan semua konfigurasi Anda ke dalam spec_helper dan hanya membutuhkan spec helper int he rails helper file.

Ini sama sekali tidak "ideal" karena pada akhirnya, Anda secara manual melakukan "refactor" ini tetapi JIKA itu benar-benar mengganggu Anda. hanya tahu itu sepenuhnya terserah Anda bagaimana menyusunRspec.configure

#rails_helper.rb

require 'spec_helper'

#EMPTY FILE

dan cukup masukkan semua pengaturan khusus rel

# 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
Denis S Dujota
sumber