Rspec'de bir grup test devre dışı bırakılsın mı?


104

describesBir sınıfın ve bunun içinde contextsher biri çeşitli itbloklara sahip çeşitli olan bir test spesifikasyonum var .

contextGeçici olarak devre dışı bırakmanın bir yolu var mı ?

Devre dışı bırakmak istediğimde pending "temporarily disabled"en üstte bir arama eklemeyi denedim contextve spesifikasyonu çalıştırdığımda beklemeyle ilgili bir şey gördüm, ancak daha sonra testlerin geri kalanını çalıştırmaya devam etti.

Benim sahip olduğum şey buydu:

describe Something
  context "some tests" do
    it "should blah" do
      true
    end
  end

  context "some other tests" do
    pending "temporarily disabled"

    it "should do something destructive" do
      blah
    end
  end
end

ama dediğim gibi, bekleyen aramanın altındaki testleri çalıştırmaya devam etti.

Arama beni , rspec'in yaratıcısının (?) Çalıştırdığım rspec 2'de mümkün olduğunu söylediği bu posta listesi başlığına yönlendirdi. Sanırım işe yaradı, ancak aşağıdaki testlerin tümünü devre dışı bırakma gibi istenen etkiye sahip değildi, ki bir pendingarama gördüğümde bunu düşündüm .

Bir alternatif var mı yoksa yanlış mı yapıyorum?

Yanıtlar:


167

RSpec 3 kullanarak bir özellikler ağacını devre dışı bırakmak için şunları yapabilirsiniz:

before { skip }
# or 
xdescribe
# or 
xcontext

Çıktıda görünecek olan atlamalı bir mesaj ekleyebilirsiniz :

before { skip("Awaiting a fix in the gem") }

ile RSpec 2 :

before { pending }

1
Şu özelliklere sahip bir blokta bunu tam olarak nasıl yaparsınız:describe 'XXXXX' do .... end
p.matsinopoulos

2
@ p.matsinopoulos Sadece aşağıdaki satıra ekleyin describe 'XXXXX' do. Harika çalıştı, teşekkürler @ Pyro!
chesterbr

Filtrelerden daha basit çözüm, +1
dolzenko

Seni seviyorum. Sana bir bira borçluyum!
Aldo 'xoen' Giambelluca

2
Bu güzel. Ayrıca, çıktıda görünecek olan 'atla'dan sonra bir mesaj da ekleyebilirsiniz.
Jan Hettich

44

Dışlama filtreleri kullanın . O sayfadan: spec_helper.rb(veya rails_helper.rb)

RSpec.configure do |c|
  c.filter_run_excluding :broken => true
end

Testinizde:

describe "group 1", :broken => true do
  it "group 1 example 1" do
  end

  it "group 1 example 2" do
  end
end

describe "group 2" do
  it "group 2 example 1" do
  end
end

"Rspec ./spec/sample_spec.rb --format doc" komutunu çalıştırdığımda

Ardından çıktı "grup 2 örnek 1" içermelidir

Ve çıktı "grup 1 örnek 1" içermemelidir

Ve çıktı "grup 1 örnek 2" içermemelidir


19

Bunun hakkında ne düşündüğünüzü görün:

describe "something sweet", pending: "Refactor the wazjub for easier frobbing" do
  it "does something well"
  it "rejects invalid input"
end

Bir şeyi "bir süreliğine" devre dışı bıraktığımda bekleyen öğelerimle ilgili nedenler görmeyi seviyorum. Bir yoruma veya dışarıda bırakılan bir örneğe / dosyaya gömülmek yerine düzenli olarak sunulan küçük yorumlar / YAPILACAKLAR işlevi görürler.

Değişen itiçin pendingveya xithızlı ve kolaydır, ama karma inşaat tercih ederim. Size her çalıştırılan dokümantasyonu verir, bir açılır kapanır (açıklamayı / bağlamı değiştirmez / bu yüzden daha sonra neyi kullanacağıma karar vermem gerekir) ve karar verilirse veya engelleyici kaldırılırsa aynı şekilde kolayca kaldırılır .

Bu, gruplar ve bireysel örnekler için aynı şekilde çalışır.


Ayrıca açıklama için de aynı şekilde çalışıp çalışmadığından emin değilim ama beklemede aslında testi çalıştırıyor ve test geçmeye başlarsa başarısız oluyor. Xdescribe (sanırım tıpkı xit gibi) - onu çalıştırmıyor.
PL J

1
bunun hem pending:ve hem de skip:rspec 3.6.0'da çalıştığını doğruladı . Bana en iyi çözüm gibi görünüyor. rspec3'te beklemede hala testleri çalıştırır, ancak çalıştırmaz skip(ancak uyguluyorsanız skip).
jrochkind

9

bir diğeri. https://gist.github.com/1300152

devre dışı bırakmak için xdescribe, xcontext, xit kullanın.

Güncelleme:

Rspec 2.11'den beri, varsayılan olarak xit içerir. bu yüzden yeni kod olacak

# put into spec_helper.rb
module RSpec
  module Core
    module DSL
      def xdescribe(*args, &blk)
        describe *args do
          pending 
        end
      end

      alias xcontext xdescribe
    end
  end
end

Kullanım

# a_spec.rb
xdescribe "padding" do
  it "returns true" do
    1.should == 1
   end
end 

3

Açıklamak yerine beklemeyi kullanın. Bloğunuz ise:

context "some other tests" do
  it "should do something destructive" do
    blah
  end
end

Tüm bloğu şu şekilde atlayabilirsiniz:

pending "some other tests" do
  it "should do something destructive" do
    blah
  end
end

1
describe "GET /blah" do

  before(:each) { pending "Feature to be implemented..." }

  it { expect(page).to have_button("Submit") }
  it { expect(page).to have_content("Blah") }
end

0

Sadece kodunuza ne olduğunu açıklamak için. Sahip olduğunuz yerde dahil olmak üzere, başlangıç ​​sırasında dosya yüklendiğinde yalnızca değerlendirilir (ve dolayısıyla çalışır). Ancak, testler çalıştığında çalıştırılması gerekir. Bu nedenle cevaplar pending(RSpec 2) veya skip(RSpec 3) 'ü bir beforebloğa koymayı önerdi .

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.