Spec / rails_helper.rb'nin spec / spec_helper.rb'den farkı nedir? Buna ihtiyacım var mı


90

Rails Tutorial'ı ikinci kez yapıyorum. Buna girdiğimde

rails generate integration_test static_pages

Anlıyorum spec/rails_helper.rbve spec/spec_helper.rbsadece yerinespec/spec_helper.rb

Şimdi testlerimi çalıştırdığımda, bunlar daha uzun (daha fazla "ayrıntılı") ve bunu son yaptığımdan daha yavaş. İki dosya arasındaki farkın ne olduğunu ve yanlış bir şey yapıp yapmadığımı merak ediyorum. Ayrıca, rails_helper.rbher şeyi karıştırmadan dosyadan kurtulmanın bir yolu var mı?


Testleriniz daha önce üretmedikleri hangi çıktıyı veriyor? (Yeni bir soruya ait olabilir.)
Dave Schweisguth

Terminolojiden emin değilim, ama şimdi testler her mücevherden geçiyor, bu da bana anlamadığım şeylerin uzun bir listesini veriyor ve ancak o zaman sonuç ortaya çıkıyor. Daha önce, sadece sonucu verdi. Buraya kopyalarım ama gerçekten uzun ...
user3417583

Muhtemelen RSpec 3'ün kullanımdan kaldırılmasıdır. Bunları arama yaparak veya bu myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3'ten anlayamazsanız , yeni bir soru sorun.
Dave Schweisguth

1
sorun çözüldü, ben .rspec gelen --warnings kaldırmak zorunda
user3417583

Yanıtlar:


130

rspec-rayları 3 üretir spec_helper.rbve rails_helper.rb. spec_helper.rbRails'e bağlı olmayan özellikler içindir (lib dizinindeki sınıfların özellikleri gibi). rails_helper.rbRails'e bağlı olan özellikler içindir (bir Rails projesinde, çoğu veya tümü). rails_helper.rbgerektirir spec_helper.rb. Yani hayır, kurtulmayın rails_helper.rb; spec_helper.rbşartnamelerinizde bunu gerektirir (ve değil ).

Rails'e bağımlı olmayan özelliklerinizin Rails'e bağımlı olmadıklarını zorunlu kılmasını ve bunları kendi başlarına çalıştırdığınızda olabildiğince hızlı çalışmasını istiyorsanız, bunlardan spec_helper.rbçok isteyebilirsiniz rails_helper.rb. Ancak , her özellik dosyasında bir yardımcıya veya diğerine ihtiyaç duymak yerine -r rails_helper, sizin için çok uygundur .rspec, bu yüzden popüler bir yaklaşım olduğundan emin olabilirsiniz.

Yay ön yükleyicisini kullanıyorsanız, her sınıfın yalnızca bir kez yüklenmesi gerekir ve yalnızca gereken tek bir özellik çalıştırsanız bilespec_helper , yay sınıfları hevesle yükler , bu nedenle yalnızca spec_helperbazı dosyalarda gerekenin çok fazla değeri yoktur .

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


4
Bu çok kafa karıştırıcı. Burada olduğu gibi hecelemek için rspec-rails benioku dosyasını güncellemek için bir PR ekleyeceğim. Açıklama için teşekkürler.
Steve

4
Rspec ile başlayan insanlar için bu büyük bir karmaşa!
Eduardo

1

Her zaman tüm yapılandırmalarınızı spec_helper içinde birleştirebilir ve yalnızca özellik yardımcısına ihtiyaç duyabilirsiniz int o rails yardımcı dosyası.

Hiçbir şekilde "ideal" değildir, çünkü günün sonunda bu "yeniden düzenleme" yi elle yapıyorsunuz, ancak EĞER sizi gerçekten rahatsız ediyorsa. sadece şunu bilin yeter ki bu tamamen size bağlıRspec.configure

#rails_helper.rb

require 'spec_helper'

#EMPTY FILE

ve sadece tüm raylara özel kurulumu getirin

# 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.