2014-06-10 19 views
71

Robię Tutorial Rails po raz drugi. Kiedy wprowadzić tenCzym różni się spec/rails_helper.rb od spec/spec_helper.rb? Czy potrzebuję tego?

rails generate integration_test static_pages 

uzyskać spec/rails_helper.rb i spec/spec_helper.rb zamiast tylko spec/spec_helper.rb

Teraz, gdy uruchomię moich testów są dłuższe (bardziej „gadatliwy”) i wolniejszy niż gdy robiłem to po raz ostatni. Zastanawiam się, jaka jest różnica między tymi dwoma plikami i czy zrobiłem coś nie tak. Czy istnieje również sposób na pozbycie się pliku rails_helper.rb bez zniekształcania wszystkiego?

+0

Jakie dane wyjściowe mają produkty testowe, których wcześniej nie produkowały? (Może należeć do nowego pytania.) –

+0

Nie jestem pewien co do terminologii, ale teraz testy przechodzą przez każdy klejnot, który daje mi długą listę rzeczy, których nie rozumiem i tylko wtedy pojawia się wynik. Wcześniej to tylko dało wynik. Skopiowałbym go tutaj, ale jest naprawdę długi ... – user3417583

+0

To prawdopodobnie wycofanie RSpec 3. Jeśli nie możesz ich znaleźć w wynikach wyszukiwania lub z tego http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3, umieść je w nowym pytaniu. –

Odpowiedz

102

rspec-rails 3 generuje spec_helper.rb i rails_helper.rb. spec_helper.rb jest dla specyfikacji, które nie zależą od Railsów (takich jak specyfikacje dla klas w katalogu lib). rails_helper.rb jest dla specyfikacji, które zależą od Rails (w projekcie Rails, większość lub wszystkie z nich). rails_helper.rb wymaga spec_helper.rb. Więc nie, nie pozbądź się rails_helper.rb; wymagaj tego (a nie spec_helper.rb) w swojej specyfikacji.

Jeśli chcesz, aby non-Rails zależne od specyfikacje wymusić, że są one nie-Rails zależne i biec tak szybko, jak to możliwe po uruchomieniu je przez siebie, można wymagać spec_helper.rb zamiast rails_helper.rb w nich. Ale jest bardzo wygodne dla -r rails_helper w twoim .rspec, zamiast wymagać jednego pomocnika lub drugiego w każdym pliku specyfikacji, więc z pewnością będzie to popularne podejście.

Jeśli używasz preloadera sprężynowego, każda klasa musi być załadowana tylko jeden raz i spring loads classes eagerly even if you only run a single spec that requires spec_helper, więc w niektórych plikach nie ma takiej wartości, która wymaga tylko spec_helper.

Źródło: https://www.relishapp.com/rspec/rspec-rails/docs/upgrade#default-helper-files

+0

Co masz na myśli przez specyfikacje spoza Railsów? Z pewnością w projekcie szyn wszystkie specyfikacje są specyfikacjami Railsów (lub raczej, wszystkie specyfikacje są specyfikacjami bez szyn, w zależności od tego, jak na to patrzysz: rspec, capybara, cucmber itp.) – DazBaldwin

+0

Rozszerzyłem moją odpowiedź; zobacz, czy to wyjaśnia. –

+1

Dzięki za wyjaśnienie – DazBaldwin