Ruby on Rails: Wechseln Sie von test_unit zu rspec

75

Ich gehe durch ein Tutorial, das die Verwendung vorgeschlagen hat rspec, aber ich habe bereits viele Standardschieneninstallationen durchlaufen. Ich möchte die Installation wirklich überhaupt nicht wiederholen müssen. Wie auch immer, wenn ich renne

$ rails g integration_test named

Ich bekomme

  invoke  test_unit
  create    test/integration/named_test.rb

Wenn ich renne bundle, werden verschiedene rspecEdelsteine ​​aufgelistet, aber test_unitnicht. Das Tutorial scheint Rails aufzurufen, rspecanstatt test_unitetwas zu tun. Wie kann ich Schienen rspecmit dem Befehl zum Integrationstestgenerator verwenden?

Explosionspillen
quelle

Antworten:

107

In Ihrer config/application.rbDatei:

config.generators do |g|
  g.test_framework :rspec
end

Wenn Sie jetzt Ihre Generatoren ausführen (Beispiel rails generate scaffold post), erhalten Sie rspec-Testdateien. Denken Sie daran, Ihren Server neu zu starten. Weitere Informationen zu Generatoren finden Sie unter:

RailsCasts # 216 Generatoren in Rails 3

Wenn Sie den integrations_test-Generator wirklich verwenden möchten, müssen Sie den Befehl speziell ändern:

rails g integration_test named --integration-tool=rspec
Spyros
quelle
1
Ich hatte das schon getan. Was meinst du mit Neustart des Servers? Es lief nie.
Explosion Pills
1
Ich meine, Spork oder Ihre Testschnittstelle neu zu starten. Wenn Sie dies ordnungsgemäß durchgeführt und 'Rails g Scaffold --help' ausgeführt haben, sollte 'rspec' als Standardtest-Framework angezeigt werden. Überprüfen Sie auch meine Bearbeitung.
Spyros
1
Ich habe die Datei config / application.rb wie angegeben aktualisiert und ausgeführt, rails g scaffold --helpund es wird weiterhin test_unit angezeigt. Muss ich etwas tun, um die Konfiguration erneut auszuführen, oder eine Möglichkeit, diese Einstellungen manuell zu ändern?
Explosion Pills
Für zukünftige Benutzer, die den anderen Weg gehen möchten, hinterlassen Sie diesen Kommentar der Vollständigkeit halber: Verwenden Sie die obige Antwort mit g.test_framework :test_unit.
Pjammer
Wie schalte ich zurück? Kann ich beide Generatoren gleichzeitig verwenden?
DataGreed
72

Bei der Arbeit mit Rails 3.2.8 und rspec-Rails 2.11.4 stellte ich fest, dass mein Problem in meiner Gemfile lag. Ich hatte rspec-railsin der :testGruppe aber nicht in der :developmentGruppe. Da Rails standardmäßig im Entwicklungsmodus ausgeführt wird (auch wenn Sie generate ausführen), rspec-railsmuss es sich in Ihrer :developmentGruppe befinden, damit es in die Generatoren eingebunden werden kann. Sobald ich das hatte, funktionierte alles gut.

tovodeverett
quelle
4
+1 rspec-Rails werden als railitie github.com/rspec/rspec-rails/blob/master/lib/… installiert und konfigurieren sich selbst als Testframework und Integrationstool. So kann man den Edelstein in eine gemeinsame Gruppe in die gemfile aufnehmengroup :development, :test do
brutuscat
7 Jahre später immer noch relevant!
Grant Birchmeier
28

Befolgen Sie ab Rails 3.2.12 die folgenden Schritte in der angegebenen Reihenfolge

rails new app_name --skip-test-unit

Fügen Sie Ihrem Gemfile in der Entwicklungs- und Testgruppe rspec-Rails hinzu

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

Lauf bundle install

Lassen Sie den Generator laufen

rails generate rspec:install

... und bereinigen Sie Ihr vorhandenes Testverzeichnis:

rm -Rf $RAILS_ROOT/test    
fontno
quelle
8
Dies funktioniert, wenn das Projekt ebenfalls bereits erstellt wurde. Ignorieren Sie einfach den rails newBefehl.
Rael Gugelmin Cunha
Passen Sie mit dem rm -Rf $RAILS_ROOT/testBefehl auf, Sie werden auch Ihre Mailer-Vorschau entfernen ...
Yoko
9

Kam heute über dieses Problem. application.rb muss aktualisiert werden mit:

config.generators do |g|
  g.test_framework :rspec
  g.integration_tool :rspec
end
iRonin
quelle
6
Das Bearbeiten der Datei application.rb ist nicht mehr erforderlich, zumindest nicht auf Rails 3.2 mit rspec-Rails
prusswan
8

Führen Sie zuerst den folgenden Befehl aus, um RSpec anstelle von Standard Test :: Unit zu verwenden

$ rails generate rspec:install

Dieser Befehl erstellt folgende Ordner / Dateien

create  .rspec
create  spec
create  spec/spec_helper.rb

Wenn Sie jetzt einen Generator zum Generieren von Schienenkomponenten wie Controller, Modell usw. verwenden, werden entsprechende RSpecs erstellt.

Amit Patel
quelle
Dies funktioniert nicht (Schienen 4), wenn Sie rspec noch nicht in Ihrer Gemfile haben. Siehe die Antwort von fontno unten.
tgf
Wie schalte ich zurück? Kann ich beide Generatoren gleichzeitig verwenden?
DataGreed
3

Fügen Sie in config / application diesen Code hinzu

 config.generators do |g|
       g.test_framework  :rspec
       g.integration_tool :rspec
 end
Amrit Dhungana
quelle
2

1. Wenn Sie eine neue Rails-App erstellen, überspringen Sie das TestUnit-Framework. Andernfalls wird das Verzeichnis test_unit generiert.

$rails new your_app --skip-test-unit

2. Fügen Sie der Datei your_app / config / application.rb den folgenden Code hinzu:

config.generators do |g| g.test_framework :rspec end

3. Fügen Sie den folgenden Code zur Gemfile von your_app hinzu:

group :test, :development do gem 'rspec-rails' end Speichern Sie es und führen Sie es aus bundle install, um rspec gem zu installieren

4. Initialisieren Sie das Verzeichnis spec /

rails generate rspec:install

Weitere Informationen finden Sie unter: https://github.com/rspec/rspec-rails

xautjzd
quelle
1

Was ich herausgefunden habe, dass einige der anderen Methoden immer noch funktionieren, ist meine Rechtschreibung zu überprüfen .... Ich hatte das, was @tovodeverett hatte, um rspec-Rails zu gruppieren mit: Entwicklung und: Test, aber Entwicklung falsch geschrieben. Das hat mein Problem behoben, aber ich habe Tests mit test_unit anstelle von rspec generiert.

zigloo99
quelle
1
$ rails g model Account
      invoke  active_record
      create    db/migrate/20140205052617_create_accounts.rb
      create    app/models/account.rb
      invoke    test_unit
      create      test/models/account_test.rb
      create      test/fixtures/accounts.yml
$ rails d model Account

Durch Ausführen von script / Rails wird rspec generiert: install fügt rspec nicht als Standardframework hinzu. Der folgende Befehl wurde in config / application.rb hinzugefügt und dann funktioniert es

config.generators do |g|
  g.test_framework :rspec
end
$ rails g model Account
      invoke  active_record
      create    db/migrate/20140205052957_create_accounts.rb
      create    app/models/account.rb
      invoke    rspec
      create      spec/models/account_spec.rb
$ rails -v
Rails 4.0.2
Abhishek Bose
quelle