wake-up-neo.com

Wie führe ich nur bestimmte Tests in Rspec durch?

Ich denke, es gibt eine Möglichkeit, nur Tests mit einem bestimmten Label auszuführen. Weiß jemand

141
Nathan Long

Es ist nicht leicht, die Dokumentation zu finden, aber Sie können Beispiele mit einem Hash versehen. Z.B.

# spec/my_spec.rb
describe SomeContext do
  it "won't run this" do
    raise "never reached"
  end

  it "will run this", :focus => true do
    1.should == 1
  end
end

$ rspec --tag focus spec/my_spec.rb

Mehr Infos zu GitHub . (Wer einen besseren Link hat, bitte beraten)

(Update)

RSpec ist jetzt hier hervorragend dokumentiert . Weitere Informationen finden Sie im Abschnitt --tag der Option .

Ab Version 2.6 kann diese Art von Tag noch einfacher ausgedrückt werden, indem die Konfigurationsoption treat_symbols_as_metadata_keys_with_true_values hinzugefügt wird, mit der Sie Folgendes tun können:

describe "Awesome feature", :awesome do

dabei wird :awesome so behandelt, als ob es :awesome => true wäre.

In diese Antwort erfahren Sie, wie Sie RSpec so konfigurieren, dass 'fokussierte' Tests automatisch ausgeführt werden. Dies funktioniert besonders gut mit Guard .

169
zetetic

Sie können alle Tests ausführen, die eine bestimmte Zeichenfolge enthalten, mit der Option --example (oder -e) :

rspec spec/models/user_spec.rb -e "User is admin"

Ich benutze das am meisten.

99
Jan Minárik

In Ihrem spec_helper.rb:

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

und dann auf Ihre Angaben:

it 'can do so and so', focus: true do
    # This is the only test that will run
end

Sie können Tests auch mit 'fit' fokussieren oder mit 'xit' ausschließen, wie folgt:

fit 'can do so and so' do
    # This is the only test that will run
end
71
Tom Chapin

alternativ können Sie die Zeilennummer übergeben: rspec spec/my_spec.rb:75 - Die Zeilennummer kann auf eine einzelne Spezifikation oder einen Kontext-/Beschreibungsblock zeigen (wobei alle Spezifikationen in diesem Block ausgeführt werden).

62
Alex Lang

Sie können auch mehrere Zeilennummern zusammen mit einem Doppelpunkt aufreihen:

$ rspec ./spec/models/company_spec.rb:81:82:83:103

Ausgabe:

Run options: include {:locations=>{"./spec/models/company_spec.rb"=>[81, 82, 83, 103]}}
42
Jonathon Batson

Ab RSpec 2.4 (ich denke mal) können Sie f, x, it und specify eine describe oder context voranstellen:

fit 'run only this example' do ... end
xit 'do not run this example' do ... end

http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#fit-class_methodhttp://rdoc.info/github/rspec/rspec-core/ RSpec/Core/ExampleGroup # xit-class_method

Vergewissern Sie sich, dass config.filter_run focus: true und config.run_all_when_everything_filtered = true in Ihrem spec_helper.rb enthalten sind.

24
Joshua Muheim

Sie können auch Spezifikationen ausführen, die standardmäßig focus: true haben

spec/spec_helper.rb

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

Dann einfach rennen

$ rspec

und nur fokussierte Tests werden ausgeführt

wenn Sie dann focus: true entfernen, werden alle Tests erneut ausgeführt

Weitere Informationen: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters

3
itsnikolay

Sie können als rspec spec/models/user_spec.rb -e "SomeContext won't run this" laufen.

0
Avijit Majhi

In neueren Versionen von RSpec ist es noch einfacher, die Unterstützung fit zu konfigurieren:

# spec_helper.rb

# PREFERRED
RSpec.configure do |c|
  c.filter_run_when_matching :focus
end

# DEPRECATED
RSpec.configure do |c|
  c.filter_run focus: true
  c.run_all_when_everything_filtered = true
end

Sehen:

https://relishapp.com/rspec/rspec-core/docs/filtering/filter-run-when-matching

https://relishapp.com/rspec/rspec-core/v/3-7/docs/configuration/run-all-when-everything-filtered

0
jwfearn