Wie kann ich Rails anweisen, beim Erstellen einer neuen Rails-App RSpec anstelle des Testgeräts zu verwenden?

152

Ich habe test-unitinstalliert und rspecinstalliert (zusammen mit -core, -expectations, -mocksund -railsVersion 2.6.x). Wenn ich den Befehl ausführe rails new foo, test-unitwerden stattdessen die Teststub-Dateien generiert rspec.

Gibt es eine Option, mit der ich Rails anweisen kann, stattdessen rspec zum Generieren der Tests zu verwenden?

aarona
quelle

Antworten:

262

Folgendes sollte funktionieren:

an der Kommandozeile:

rails new MYAPP -T # The -T option tells rails not to include Test::Unit

in Gemfile:

gem 'rspec-rails'

an der Kommandozeile:

bundle install
rails g rspec:install
Zabba
quelle
Ich denke, einige dieser Schritte sind nicht in Ordnung, nein? Dies sieht jedoch so aus, als würde dies funktionieren, wenn es in der richtigen Reihenfolge durchgeführt wird. Bitte bearbeiten Sie Ihre Antwort und ich werde sie als akzeptiert markieren.
Aarona
60
Sie benötigen den generator.rbInitialisierer nicht, dies wird von RSpecs Railtie erledigt. Alles, was Sie brauchen, ist rspec-railsinnerhalb der developmentGruppe von, die Gemfileausreicht, um es für die Generatoren zu benötigen. Sie müssen die App auch nicht mit generieren -T, Sie können das Verzeichnis löschen testund es wird funktionieren.
Ryan Bigg
1
Können Sie den Code von g.test_framework =: rspec zu g.test_framework: rspec
Deepak Lamichhane
8
@ RyanBigg: mit -T Option haben wir "rails/test_unit/railtie"inapplication.rb
Giang Nguyen
13
Wenn Sie den rspec-railsEdelstein hinzufügen , ist es wichtig, ihn zu testen und zu entwickeln. Andernfalls verwenden die Generatoren RSpec nicht, selbst wenn Sie die obigen Schritte ausführen.
FebruarInk
73

Erstellen Sie Ihre neue Schienenanwendung wie folgt:

rails new <app_name> -T

Oder entfernen Sie Ihr testVerzeichnis aus Ihrer vorhandenen Anwendung:

rm -rf test/

Machen Sie einen Eintrag in Ihrem Gemfile:

gem 'rspec-rails'

Installieren Sie über die Befehlszeile den Edelstein

$ bundle install

Installieren Sie über die Befehlszeile rspec in Ihrer Anwendung:

$ rails g rspec:install

Jetzt verwendet Ihre Schienenanwendung RSpec anstelle der Testeinheit.

Sayuj
quelle
2
Der Schritt "Bundle-Installation" fehlte in dieser Liste. Hinzugefügt.
cczona
6

Sobald Sie Ihre Schienenanwendung erstellt haben mit:

rails new <app_name> -T  # to exclude Test::Unit

Fügen Sie den RSpec-Edelstein folgendermaßen zu Ihrer Gemfile hinzu:

group :development, :test do
  gem "rspec-rails"
end

In die Befehlszeile schreiben:

bundle install  # this will install the missing gems

Jetzt müssen Sie RSpec installieren, indem Sie Folgendes ausführen:

rails generate rspec:install

Dadurch werden die folgenden Dateien generiert:

create  .rspec
create  spec
create  spec/spec_helper.rb
create  spec/rails_helper.rb

Ich empfehle dringend, alle spec_helper- und rails_helper-Kommentare durchzulesen, um ein gutes Verständnis für die einzelnen Optionen zu erhalten.

Sobald alles eingestellt ist, können Sie alle Ihre Tests ausführen mit:

bundle exec rspec

Weitere Informationen zu den empfohlenen Konfigurationen spec_helper und Rails_helper finden Sie unter https://kolosek.com/rails-rspec-setup .

Nesha Zoric
quelle
4

Ich bin ein neuer Entwickler und habe gerade ein Rails-Flag (-rspec) erstellt, um das Problem von OP zu beheben. Es wird Test :: Unit los und fügt das Rails-Rspec-Juwel mit einem Bash-Skript ein. Das Skript kann geändert werden, um Linux-Entwicklern zu helfen, indem das Therubyracer-Gem automatisch hinzugefügt oder benutzerdefinierte Flags und Gemsets erstellt werden. (Vielleicht gehen Sie speziell zu dieser Edelsteinlinie und löschen Sie den Kommentar)

Hier ist das Wesentliche && Ich hoffe, das hilft jemandem da draußen. https://gist.github.com/MTen/8310116

MTen
quelle
0

Es gibt keine native Möglichkeit, dies mit der railsCLI zu tun . Generieren Sie ein neues Projekt ohne test-unit:

rails new rails-app --skip-test

Befolgen Sie dann die rspecAnweisungen, um es in die neue Rails-App zu integrieren.

Das ist mein Design
quelle