Ich habe die folgende Datei:
/spec/controllers/groups_controller_spec.rb
Welchen Befehl im Terminal verwende ich, um nur diese Spezifikation auszuführen, und in welchem Verzeichnis führe ich den Befehl aus?
Meine Edelsteindatei:
# Test ENVIRONMENT GEMS
group :development, :test do
gem "autotest"
gem "rspec-rails", "~> 2.4"
gem "cucumber-rails", ">=0.3.2"
gem "webrat", ">=0.7.2"
gem 'factory_girl_rails'
gem 'email_spec'
end
Spezifikationsdatei:
require 'spec_helper'
describe GroupsController do
include Devise::TestHelpers
describe "GET yourgroups" do
it "should be successful and return 3 items" do
Rails.logger.info 'HAIL MARRY'
get :yourgroups, :format => :json
response.should be_success
body = JSON.parse(response.body)
body.should have(3).items # @user1 has 3 permissions to 3 groups
end
end
end
ruby-on-rails
ruby
ruby-on-rails-3
rspec
Ein Lehrling
quelle
quelle
bundle exec rspec spec --help
Ich gebe Ihnen die Antwort:Antworten:
Sie sind sich nicht sicher, wie lange dies verfügbar ist, aber es gibt eine Rspec-Konfiguration für die Lauffilterung. Jetzt können Sie diese zu Ihrer
spec_helper.rb
:Und dann einen Fokus - Tag der hinzufügen
it
,context
oderdescribe
nur diesen Block zu laufen:RSpec-Dokumentation:
https://www.rubydoc.info/github/rspec/rspec-core/RSpec/Core/Configuration#filter_run_when_matching-instance_method
quelle
rspec
Befehle zu verwenden, um die Spezifikation mit dem entsprechenden Parameter auszuführen, um anzugeben, welcherNormalerweise mache ich:
Wo
42
steht die Zeile des Tests, den ich ausführen möchte.EDIT1:
Sie können auch Tags verwenden. Siehe hier .
EDIT 2:
Versuchen:
quelle
rspec
fehlgeschlagen, weil die Version auf Ihrem System aktueller ist als die in Ihrer Gem-Datei.Mit Rechen:
(Gutschrift geht auf diese Antwort . Geh und stimme ihn ab.)
EDIT (dank @cirosantilli): Um ein bestimmtes Szenario innerhalb der Spezifikation laufen, haben Sie eine RegexMuster Spiel zu liefern , die die Beschreibung passt.
quelle
SPEC=path/to/spec.rb:42
den Test mit der angegebenen Zeilennummer ausführen, obwohl anscheinend auch alleit_behaves_like
Tests ausgeführt werden (Fehler?).Sie können dem Befehl spec einen regulären Ausdruck übergeben, der nur
it
Blöcke ausführt, die dem von Ihnen angegebenen Namen entsprechen.Update 2019: Rspec2 wechselte vom Befehl 'spec' zum Befehl 'rspec'.
quelle
do
nach einerit
,context
oderdescribe
Erklärung.Es gibt viele Möglichkeiten:
quelle
Meine bevorzugte Methode zum Ausführen bestimmter Tests ist etwas anders - ich habe die Zeilen hinzugefügt
Zu meiner spec_helper-Datei.
Wenn ich jetzt einen bestimmten Test (oder Kontext oder eine bestimmte Spezifikation) ausführen möchte, kann ich einfach das Tag "Fokus" hinzufügen und meinen Test wie gewohnt ausführen - nur die fokussierten Tests werden ausgeführt. Wenn ich alle Fokus-Tags entferne, werden alle
run_all_when_everything_filtered
Tests wie gewohnt gestartet und ausgeführt.Es ist nicht ganz so schnell und einfach wie die Befehlszeilenoptionen - Sie müssen die Datei für den Test bearbeiten, den Sie ausführen möchten. Aber ich denke, es gibt dir viel mehr Kontrolle.
quelle
@apneadiving Antwort ist eine gute Möglichkeit, dies zu lösen. Jetzt haben wir jedoch eine neue Methode in Rspec 3.3. Wir können einfach laufen,
rspec spec/unit/baseball_spec.rb[#context:#it]
anstatt eine Zeilennummer zu verwenden. Von hier genommen:Anstatt also zu tun,
rspec spec/unit/baseball_spec.rb:42
wo es (Test in Zeile 42) der erste Test ist, können wir es einfach tunrspec spec/unit/baseball_spec.rb[1:1]
oderrspec spec/unit/baseball_spec.rb[1:1:1]
abhängig davon, wie verschachtelt der Testfall ist.quelle
In Schienen 5,
Ich habe auf diese Weise eine einzelne Testdatei ausgeführt (alle Tests in einer Datei).
Der Klassenname kann verwendet werden, um mit der gewünschten Datei übereinzustimmen
TopicsControllerTest
Meine Klasse
class TopicsControllerTest < ActionDispatch::IntegrationTest
Ausgabe :
Wenn Sie möchten, können Sie den regulären Ausdruck so anpassen, dass er mit einer einzelnen Testmethode übereinstimmt
\TopicsControllerTest#test_Should_delete\
quelle
Für das Modell wird case nur in Zeile 5 ausgeführt
Für Controller: Der Fall wird nur in Zeile 5 ausgeführt
Entfernen Sie für das Signalmodell oder den Controller die Zeilennummer von oben
Fall auf allen Modellen ausführen
Fall auf allen Controllern ausführen
Alle Fälle ausführen
quelle
Führen Sie die Befehle aus dem Stammverzeichnis Ihres Projekts aus:
quelle
Ab rspec 2 können Sie Folgendes verwenden:
quelle
Vorausgesetzt, Sie befinden sich in einem Rails 3-Projekt mit rspec 2, aus dem Rails-Stammverzeichnis:
sollte auf jeden Fall funktionieren. Ich hatte es satt, das zu tippen, also habe ich einen Alias erstellt, um 'bundle exec rspec' auf 'bersp' zu kürzen.
'bundle exec' ist so, dass es die genaue Gem-Umgebung lädt, die in Ihrer Gem-Datei angegeben ist: http://gembundler.com/
Rspec2 wechselte vom Befehl 'spec' zum Befehl 'rspec'.
quelle
Ich benutze dieses Schutzjuwel, um meinen Test automatisch auszuführen. Der Test wird ausgeführt, nachdem Vorgänge für die Testdatei erstellt oder aktualisiert wurden.
https://github.com/guard/guard-test
oder normalerweise können Sie mit folgendem Befehl ausführen
rspec spec / controller / groups_controller_spec.rb
quelle
Sie können so etwas tun:
quelle
Sie können verwenden
Die Zeilennummer sollte die Zeilennummer der Zeilen "beschreiben" oder "es" sein, damit Tests ausgeführt werden, die in diesem bestimmten Block vorhanden sind. Stattdessen werden alle Zeilen neben line_number ausgeführt.
Sie können auch einen Block mit einem benutzerdefinierten Namen erstellen und dann nur diese Blöcke ausführen.
quelle
Ein weiterer häufiger Fehler besteht darin, eine ältere Rails-App noch auf Rails 5+ zu haben oder aktualisiert zu haben und sie
require 'spec_helper'
oben in jeder Testdatei zu platzieren. Dies sollte sich in ändernrequire 'rails_helper'
. Wenn zwischen der Rake-Task (rake spec
) und dem Ausführen einer einzelnen Spezifikation (rspec path/to/spec.rb
) ein unterschiedliches Verhalten auftritt , ist dies ein häufiger GrundDie beste Lösung ist zu
1) Stellen Sie sicher, dass Sie
require 'rails_helper'
oben in jeder Ihrer Spezifikationsdateien verwenden - nicht im älteren Stil.require 'spec_helper'
2) Verwenden Sie dierake spec SPEC=path/to/spec.rb
SyntaxDer ältere Stil sollte
rspec path/to/spec.rb
meiner Meinung nach von der Community zu diesem Zeitpunkt im Jahr 2020 als nicht in Mode sein (aber natürlich werden Sie ihn zum Laufen bringen, abgesehen von anderen Überlegungen).quelle