it-swarm.com.de

Wie führe ich einen einzelnen RSpec-Test durch?

Ich habe 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
281
AnApprentice

Sie sind sich nicht sicher, wie lange dies noch verfügbar ist, aber es gibt eine Rspec-Konfiguration für die Lauffilterung. Fügen Sie dies jetzt zu Ihrem spec_helper.rb Hinzu:

RSpec.configure do |config|
  config.filter_run_when_matching :focus
end

Fügen Sie dann dem it, context oder describe ein Fokus-Tag hinzu, um nur diesen Block auszuführen:

it 'runs a test', :focus do
  ...test code
end

RSpec-Dokumentation:

https://www.rubydoc.info/github/rspec/rspec-core/RSpec/Core/Configuration#filter_run_when_matching-instance_method

3
emc

Normalerweise mache ich:

rspec ./spec/controllers/groups_controller_spec.rb:42

Wo 42 repräsentiert die Zeile des Tests, den ich ausführen möchte.

EDIT1:

Sie können auch Tags verwenden. Siehe hier .

EDIT 2:

Versuchen:

bundle exec rspec ./spec/controllers/groups_controller_spec.rb:42
453
apneadiving

Mit Rechen:

rake spec SPEC=path/to/spec.rb

(Verdienst geht an diese Antwort . Wählt ihn aus.)

[~ # ~] edit [~ # ~] (danke an @cirosantilli): Um ein bestimmtes Szenario innerhalb der Spezifikation auszuführen, müssen Sie ein angeben Regex-Musterübereinstimmung, die mit der Beschreibung übereinstimmt.

rake spec SPEC=path/to/spec.rb \
          SPEC_OPTS="-e \"should be successful and return 3 items\""
65

Sie können einen regulären Ausdruck an den Befehl spec übergeben, der nur it Blöcke ausführt, die dem von Ihnen angegebenen Namen entsprechen.

spec path/to/my_spec.rb -e "should be the correct answer"
57

Es gibt viele Möglichkeiten:

rspec spec                           # All specs
rspec spec/models                    # All specs in the models directory
rspec spec/models/a_model_spec.rb    # All specs in the some_model model spec
rspec spec/models/a_model_spec.rb:nn # Run the spec that includes line 'nn'
rspec -e"text from a test"           # Runs specs that match the text
rspec spec --tag focus               # Runs specs that have :focus => true
rspec spec --tag focus:special       # Run specs that have :focus => special
rspec spec --tag focus ~skip         # Run tests except those with :focus => true
24
Michael Durrant

Meine bevorzugte Methode zum Ausführen bestimmter Tests ist etwas anders - ich habe die Zeilen hinzugefügt

  RSpec.configure do |config|
    config.filter_run :focus => true
    config.run_all_when_everything_filtered = true
  end

Zu meiner spec_helper-Datei.

Wenn ich jetzt einen bestimmten Test (oder Kontext oder Spezifikation) ausführen möchte, kann ich einfach das Tag "focus" hinzufügen und meinen Test wie gewohnt ausführen - nur die fokussierten Tests werden ausgeführt. Wenn ich alle Fokus-Tags entferne, wird das run_all_when_everything_filtered startet und führt alle Tests wie gewohnt aus.

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 fühle, es gibt Ihnen viel mehr Kontrolle.

23
GlyphGryph

@apneadiving Antwort ist ein guter Weg, um dies zu lösen. Jetzt haben wir jedoch eine neue Methode in Rspec 3.3. Wir können einfach rspec spec/unit/baseball_spec.rb[#context:#it] anstelle einer Zeilennummer. Entnommen aus hier:

RSpec 3.3 führt eine neue Methode zur Identifizierung von Beispielen ein [...]

Zum Beispiel dieser Befehl:

$ rspec spec/unit/baseball_spec.rb[1:2,1:4]… Würde das 2. und 4. Beispiel oder die Gruppe ausführen, die unter der 1. obersten Gruppe definiert sind, die in spec/unit/baseball_spec.rb definiert ist.

Also anstatt rspec spec/unit/baseball_spec.rb:42 wo es (Test in Zeile 42) der erste Test ist, können wir einfach rspec spec/unit/baseball_spec.rb[1:1] oder rspec spec/unit/baseball_spec.rb[1:1:1] abhängig davon, wie verschachtelt der Testfall ist.

6
Ingo

In Rails 5,

Ich habe auf diese Weise eine einzelne Testdatei ausgeführt (alle Tests in einer Datei)

Rails test -n /TopicsControllerTest/ -v

Der Klassenname kann verwendet werden, um mit der gewünschten Datei TopicsControllerTest übereinzustimmen.

Meine Klasse class TopicsControllerTest < ActionDispatch::IntegrationTest

Ausgabe :

enter image description here

Wenn Sie möchten, können Sie den regulären Ausdruck an die jeweilige Testmethode anpassen. \TopicsControllerTest#test_Should_delete\

Rails test -n /TopicsControllerTest#test_Should_delete/ -v
3
Alupotha

Für das Modell wird case nur in Zeile 5 ausgeführt

bundle exec rspec spec/models/user_spec.rb:5

Für Controller: Es wird nur case in Zeile 5 ausgeführt

bundle exec rspec spec/controllers/users_controller_spec.rb:5

Entfernen Sie für das Signalmodell oder den Controller die Zeilennummer von oben

Um bei allen Modellen zu laufen

bundle exec rspec spec/models

Zum Ausführen von case auf allen Controllern

bundle exec rspec spec/controllers

Alle Fälle ausführen

 bundle exec rspec 
1
Sandeep Kapil

ab rspec 2 können Sie Folgendes verwenden:

# in spec/spec_helper.rb
RSpec.configure do |config|
  config.filter_run :focus => true
  config.run_all_when_everything_filtered = true
end

# in spec/any_spec.rb
describe "something" do
  it "does something", :focus => true do
    # ....
  end
end
1
Rudi

Ich benutze diesen Schutzedelstein, um meinen Test automatisch auszuführen. Der Test wird nach dem Erstellen oder Aktualisieren von Vorgängen für die Testdatei ausgeführt.

https://github.com/guard/guard-test

oder in der Regel können Sie mit folgendem Befehl ausführen

rspec spec/controller/groups_controller_spec.rb

0

Sie können so etwas tun:

 rspec/spec/features/controller/spec_file_name.rb
 rspec/spec/features/controller_name.rb         #run all the specs in this controller
0
Prabhakar

Vorausgesetzt, Sie befinden sich in einem Rails 3-Projekt mit rspec 2, aus dem Rails=-Stammverzeichnis:

  bundle exec rspec spec/controllers/groups_controller_spec.rb 

sollte auf jeden fall funktionieren. Ich habe es satt, das zu tippen, also habe ich einen Alias ​​erstellt, um "bundle exec rspec" zu "bersp" zu verkürzen.

'bundle exec' lädt die exakte Gem-Umgebung, die in Ihrer Gem-Datei angegeben ist: http://gembundler.com/

Rspec2 hat vom Befehl 'spec' zum Befehl 'rspec' gewechselt.

0
MissingHandle