2016-04-24 42 views
1

假設包含了大量的測試SPEC文件:規範運行不同的配置同一套測試

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 

我想要做相同的一組測試,但有不同的配置,例如,之前(:全部),它看起來像這樣:

before(:all) do 
    @object = buildObjectB 
end 

這樣做的最佳方法是什麼?

回答

0

您可以使用Shared Examples and Contexts

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 

(給你的測試是兩個對象都是一樣的)

0

我想你會想要使用context。就像describe一樣,但是它的語義名稱更適合像你這樣的情況。

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 

當你的測試失敗,它將鏈中的所有describecontextit參數,並給你測試例子充分說明。

+0

感謝您的答覆。但是因爲所有的測試代碼,例如在'it'內的計算機......''都完全一樣。有沒有辦法讓它更簡單(重用那部分代碼)? –

+0

您是否考慮過在同一測試示例中測試兩個對象? –

+0

雖然有爭議,但我不會過分擔心乾燥規格。畢竟,當某些事情失敗時,你只是想看看規範,並立即明白爲什麼它失敗了,而不必四處看看試圖遵循代碼。 –

相關問題