Rspec'de yalnızca belirli testleri nasıl çalıştırabilirim?


159

Sadece belirli bir etikete sahip testler yapmanın bir yolu olduğunu düşünüyorum. Kimse biliyor mu?

Yanıtlar:


186

Belgeleri bulmak kolay değildir, ancak örnekleri bir karma ile etiketleyebilirsiniz. Örneğin.

# 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

GitHub hakkında daha fazla bilgi . (daha iyi bir bağlantıya sahip olan herkes, lütfen tavsiye edin)

(Güncelleme)

RSpec artık mükemmel bir şekilde belgelenmiştir . Ayrıntılar için --tag seçenek bölümüne bakın.

V2.6'dan itibaren bu tür bir etiket, yapılandırma seçeneği dahil edilerek daha kolay ifade edilebilir treat_symbols_as_metadata_keys_with_true_values:

describe "Awesome feature", :awesome do

olduğu :awesomegibi tedavi edilir :awesome => true.

Ayrıca RSpec'in 'odaklanmış' testleri otomatik olarak çalıştıracak şekilde nasıl yapılandırılacağı için bu cevaba bakınız . Bu özellikle Guard ile iyi çalışır .


Bu yüzden aramaya gitmek zorunda değilsiniz, zetetic'in önerisine doğrudan bağlantı burada ( Rspec
tir38

Kodun asla odakla birleştirilmemesini sağlamak için paketimize bir özellik ekledik: true hala kaynak kontrolünde. gist.github.com/jwg2s/7361603
jwg2s

@ jwg2s Taahhütleri engellemek için bir git kancası kullanıyorum :focus, bu da 'bağlama.pry , console.log`, vb. gibi istenmeyenlerin kod tabanına sürünmesini engelliyor .
13'te zetetik

1
@Otheus hayır, ben sadece hayranıyım :) Relish'te yaptıklarını gerçekten çok seviyorum, ama SO sadece kendi belge özelliğini başlattı, bu yüzden biraz rekabet görebiliriz.
zetetic

1
Belki beni gerçekten rspecprogramın kullanımını ve gerçek davranışını açıklayan dokümantasyon yolunda gösterebilirsiniz :) Çünkü Relish dokümanı söylemez.
Otheus


90

Sizin spec_helper.rb:

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

ve sonra sizin özellikleriniz:

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

Ayrıca testleri 'fit' ile odaklayabilir veya 'xit' ile hariç tutabilirsiniz, şöyle:

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

1
config.filter_run_when_matching:focus
Rspec 3.5'te

4
'Odaklanma: doğru' yanlışlıkla yapılırsa, testlerin çoğunu yapmamasına rağmen CI'niz geçecektir.
zach

67

alternatif olarak satır numarasını iletebilirsiniz: rspec spec/my_spec.rb:75- satır numarası tek bir spesifikasyonu veya bir bağlam / açıklama bloğunu gösterebilir (bu bloktaki tüm spesifikasyonları çalıştırarak)


50

Ayrıca, iki nokta üst üste işaretiyle birlikte birden çok satır numarası da dizebilirsiniz:

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

Çıktı:

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

Bu çok altın! 🙇🏾‍♂️
iGbanam

28

RSpec 2.4 itibariyle (sanırım) bir başa ekleyebilir fveya xetmek it, specify, describeve context:

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_method http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#xit-class_method

İçinde bulunduğunuzdan config.filter_run focus: trueve config.run_all_when_everything_filtered = truebulunduğunuzdan emin olun spec_helper.rb.



3

Ayrıca focus: true, varsayılan olarak

Spec / spec_helper.rb

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

Sonra sadece koş

$ rspec

ve sadece odaklanmış test çalıştırılacak

o zaman focus: truetüm testleri kaldırdığınızda tekrar çalıştırın

Daha fazla bilgi: https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters


Her spec/spec_helper.rbzaman dahil mi? Ya da sadece seçenek verilmemişse? Neden test modülleri var require 'spec_helber've yukarıdaki koda sahip olmak , dosyayı belirterek tek bir test yapma olasılığını ortadan kaldırıyor? Bununla ilgili herhangi bir belge bulamıyorum.
Otheus

1
spec_helper.rbEğer varsa daima dahil edilir --require spec_helperde .rspecproje kök.
Kris

1

Olarak çalıştırabilirsiniz rspec spec/models/user_spec.rb -e "SomeContext won't run this".

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.