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


159

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

Antworten:


186

Es ist nicht einfach, 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

Weitere Infos zu GitHub . (Jeder mit einem besseren Link, bitte beraten)

(aktualisieren)

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

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

describe "Awesome feature", :awesome do

wo :awesomewird behandelt, als ob es wäre :awesome => true.

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


Damit Sie nicht suchen müssen, finden Sie hier (für Rspec 2.12) den direkten Link zum Vorschlag von zetetic. Relishapp.com/rspec/rspec-core/v/2-12/docs/command-line/…
tir38

Wir haben unserer Suite eine Spezifikation hinzugefügt, um sicherzustellen, dass Code niemals mit dem Fokus zusammengeführt wird: true, noch in der Quellcodeverwaltung. gist.github.com/jwg2s/7361603
jwg2s

@ jwg2s Ich verwende einen Git-Hook, um Commits zu blockieren :focus, wodurch auch verhindert wird, dass unerwünschte Ereignisse wie 'binding.pry , console.log ' usw. in die Codebasis eindringen.
Zetetic

1
@Otheus nein, ich bin nur ein Fan :) Ich mag wirklich, was sie auf Relish gemacht haben, aber SO hat gerade eine eigene Dokumentationsfunktion gestartet, so dass wir vielleicht eine Konkurrenz sehen.
Zetetic

1
Vielleicht können Sie mich auf die Dokumentation hinweisen, die tatsächlich die Verwendung und das tatsächliche Verhalten des rspecProgramms beschreibt :) Weil das Relish-Dokument dies nicht tut.
Otheus


89

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 Spezifikationen:

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

1
In rspec 3.5 ist es config.filter_run_when_matchingund es könnte funktionieren, indem man einfach :focuszum Beispiel hinzufügt
Ali Ghanavatian

4
Wenn 'focus: true' versehentlich festgeschrieben wird, besteht Ihr CI, obwohl die meisten Tests nicht ausgeführt werden.
Zach

67

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


50

Sie können auch mehrere Zeilennummern mit einem Doppelpunkt verbinden:

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

Ausgabe:

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

Das ist so Gold! 🙇🏾‍♂️
iGbanam



3

Sie können auch Spezifikationen ausführen, die focus: truestandardmäßig vorhanden sind

spec / spec_helper.rb

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

Dann einfach laufen

$ rspec

und es wird nur ein fokussierter Test ausgeführt

Wenn Sie dann focus: truealle Tests entfernt haben, führen Sie sie erneut aus

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


Ist spec/spec_helper.rbimmer enthalten? Oder nur wenn keine Optionen angegeben sind? Warum haben Testmodule require 'spec_helber'die Möglichkeit, einen einzelnen Test durch Angabe der Datei auszuführen, und schließt der obige Code nicht aus? Ich kann keine Dokumentation dazu finden.
Otheus

1
spec_helper.rbwenn Sie ist immer enthalten --require spec_helperin .rspecder Projektwurzel.
Kris

0

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.