2016-04-24 7 views
1

Angenommen, eine spec-Datei ausführen, die eine Reihe von Tests enthält:spec den gleichen Satz von Tests mit unterschiedlicher Konfiguration

before(:all) do 
    @object = buildObjectA 
end 

it 'should compute x correctly' do 
    test something based on object 
end 

it 'should compute y correctly' do 
    test something based on object 
end 

Ich wollte die gleiche Reihe von Tests zu tun, sondern mit einer anderen Konfiguration, beispielsweise in vor (: alle), sieht es so aus:

before(:all) do 
    @object = buildObjectB 
end 

Was ist der beste Weg, dies zu tun?

Antwort

0

können Sie Shared Examples and Contexts verwenden:

RSpec.shared_examples "something" do |x| 
    it 'should compute x correctly' do 
    test something based on object 
    end 

    it 'should compute y correctly' do 
    test something based on object 
    end 
end 

RSpec.describe "A" do 
    include_examples "something", buildObjectA 
end 

RSpec.describe "B" do 
    include_examples "something", buildObjectB 
end 

(gegeben die Tests alle gleich sind für beide Objekte)

0

Ich denke, Sie wollen context verwenden. Ist wie describe aber hat einen semantischen Namen, der besser zu einer Situation wie Ihres passt.

context 'when object is A' do 
    before(:all) do 
    @object = buildObjectA 
    end 

    it 'should compute x correctly' do 
    test something based on object 
    end 

    it 'should compute y correctly' do 
    test something based on object 
    end 
end 

context 'when object is B' do 
    before(:all) do 
    @object = buildObjectB 
    end 

    it 'should compute x correctly' do 
    test something based on object 
    end 

    it 'should compute y correctly' do 
    test something based on object 
    end 
end 

Wenn Ihr Test nicht besteht, wird es Kette all describe, context und it Argumente und gibt Ihnen die vollständige Beschreibung Ihres Testbeispiel.

+0

Danke für die Antwort. Aber da alle Testcodes, z. B. in "es" Computer ... "sind genau gleich. Gibt es eine Möglichkeit, es einfacher zu machen (den Teil der Codes wiederverwenden)? –

+0

Haben Sie in Betracht gezogen, beide Objekte im selben Testbeispiel zu testen? –

+0

Obwohl diskutabel, würde ich mir keine Sorgen über DRY-ing-Spezifikationen machen. Schließlich, wenn etwas fehlschlägt, wollen Sie nur die Spezifikation ansehen und sofort verstehen, warum es scheitert, ohne sich umzusehen und dem Code zu folgen. –

Verwandte Themen