Po raz drugi robię samouczek dotyczący Railsów. Kiedy w to wchodzę
rails generate integration_test static_pages
Dostaję spec/rails_helper.rb
i spec/spec_helper.rb
zamiast po prostuspec/spec_helper.rb
Teraz, kiedy przeprowadzam testy, są one dłuższe (bardziej „szczegółowe”) i wolniejsze niż wtedy, gdy robiłem to ostatnim razem. Zastanawiam się, jaka jest różnica między tymi dwoma plikami i czy zrobiłem coś źle. Czy istnieje sposób na pozbycie się rails_helper.rb
pliku bez zepsucia wszystkiego?
ruby-on-rails
testing
rspec
rspec-rails
rspec3
user3417583
źródło
źródło
Odpowiedzi:
rspec-rails 3 generuje
spec_helper.rb
irails_helper.rb
.spec_helper.rb
dotyczy specyfikacji, które nie zależą od Railsów (takich jak specyfikacje klas w katalogu lib).rails_helper.rb
dotyczy specyfikacji, które zależą od Railsów (w projekcie Railsowym, większość lub wszystkie).rails_helper.rb
wymagaspec_helper.rb
. Więc nie, nie pozbywaj sięrails_helper.rb
; wymagaj tego (a niespec_helper.rb
) w swoich specyfikacjach.Jeśli chcesz, aby specyfikacje niezależne od Railsów wymuszały, że nie są zależne od Railsów, i aby działały tak szybko, jak to możliwe, gdy uruchamiasz je samodzielnie, możesz wymagać
spec_helper.rb
raczej niżrails_helper.rb
w tych. Ale jest to bardzo wygodne, aby-r rails_helper
w swojej.rspec
zamiast wymagające jednego pomocnika lub inny w każdym pliku spec, więc z pewnością będzie popularnym podejściem.Jeśli używasz modułu wstępnego ładowania sprężyny, każda klasa musi zostać załadowana tylko raz, a sprężyna chętnie
spec_helper
obciąża klasy, nawet jeśli używasz tylko jednej specyfikacji, która wymaga , więc nie ma takiej wartości w wymaganiu tylkospec_helper
w niektórych plikach.Źródło: https://www.relishapp.com/rspec/rspec-rails/docs/upgrade#default-helper-files
źródło
Zawsze możesz połączyć wszystkie swoje konfiguracje w spec_helper i wymagać tylko tego helpera w pliku pomocniczym rails.
Nie jest to bynajmniej „idealne”, ponieważ na koniec dnia robisz ten „refaktor” ręcznie, ale JEŚLI naprawdę ci to przeszkadza. po prostu wiedz, że to całkowicie zależy od Ciebie, jak uporządkować plik
Rspec.configure
#rails_helper.rb require 'spec_helper' #EMPTY FILE
i po prostu wprowadź wszystkie specyficzne ustawienia dla szyn
# 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
źródło