Come posso eseguire solo test specifici in Rspec?


159

Penso che ci sia un modo per eseguire solo test con una determinata etichetta. Qualcuno lo sa?

Risposte:


186

Non è facile trovare la documentazione, ma puoi taggare esempi con un hash. Per esempio.

# 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

Maggiori informazioni su GitHub . (chiunque abbia un link migliore, si prega di avvisare)

(aggiornare)

RSpec è ora superbamente documentato qui . Vedi la sezione delle opzioni --tag per i dettagli.

A partire dalla v2.6 questo tipo di tag può essere espresso in modo ancora più semplice includendo l'opzione di configurazione treat_symbols_as_metadata_keys_with_true_values, che consente di:

describe "Awesome feature", :awesome do

dove :awesomeviene trattato come se fosse :awesome => true.

Vedi anche questa risposta su come configurare RSpec per eseguire automaticamente test "focalizzati". Funziona particolarmente bene con Guard .


Quindi non devi cercare, il link diretto al suggerimento di Zetetic è qui (per Rspec 2.12) relishapp.com/rspec/rspec-core/v/2-12/docs/command-line/…
tir38

Abbiamo aggiunto una specifica alla nostra suite per garantire che il codice non venga mai unito allo stato attivo: vero ancora nel controllo del codice sorgente. gist.github.com/jwg2s/7361603
jwg2s

@ jwg2s Uso un hook git per bloccare i commit :focus, il che impedisce anche che indesiderabili come 'binding.pry , console.log`, ecc. si insinuino nella base di codice.
Zetetic

1
@Otheus no, sono solo un fan :) Mi piace molto quello che hanno fatto su Relish, ma SO ha appena lanciato la sua funzione di documentazione, quindi potremmo vedere un po 'di concorrenza.
zetetico,

1
Forse puoi indicarmi la documentazione che descrive effettivamente l'uso e il comportamento effettivo del rspecprogramma :) Perché il documento Relish no.
Otheus,


90

Nel tuo spec_helper.rb:

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

e poi sulle tue specifiche:

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

Puoi anche focalizzare i test con 'fit' o escludere con 'xit', in questo modo:

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

1
In rspec 3.5, lo è config.filter_run_when_matchinge potrebbe funzionare solo aggiungendo :focusall'esempio
Ali Ghanavatian,

4
Se 'focus: true' viene commesso accidentalmente, il tuo CI passerà nonostante non esegua la maggior parte dei test.
zach

67

in alternativa puoi passare il numero di riga: rspec spec/my_spec.rb:75- il numero di riga può puntare a una singola specifica o a un blocco contesto / descrizione (eseguendo tutte le specifiche in quel blocco)


50

Puoi anche mettere insieme più numeri di riga insieme ai due punti:

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

Produzione:

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

Questo è così oro! 🙇🏾‍♂️
iGbanam



3

Inoltre è possibile eseguire le specifiche che hanno focus: true per impostazione predefinita

spec / spec_helper.rb

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

Quindi semplicemente corri

$ rspec

e verrà eseguito solo il test mirato

quindi quando lo rimuovi focus: true tutti i test, è necessario eseguire nuovamente

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


È spec/spec_helper.rbsempre incluso? O solo se non ci sono opzioni? Perché i moduli di test hanno require 'spec_helber'e non avere il codice sopra elimina la possibilità di eseguire un singolo test specificando il file? Non riesco a trovare alcuna documentazione su questo.
Otheus,

1
spec_helper.rbè sempre incluso se ci si trova --require spec_helpernella .rspecradice del progetto.
Kris,

1

Puoi correre come rspec spec/models/user_spec.rb -e "SomeContext won't run this".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.