2016-12-05 47 views
0

我是capybara rspec集成測試的新手。 如何使用動態計算的參數調用共享示例?使用動態計算參數調用共享示例

shared_examples_for "a measurable object" do |example, display_name| 
    it "is example - #{display_name}" do 
     visit "www.example.com?args=test" 
     expect(page.find("#examplediv").text).to eq example 
    end 
end 

describe "example" do 
    # where to compute this dynamic_value 
    it_behaves_like "a measurable object", dynamic_value, "example 1" 
end 

describe和shared_example都在單獨的文件中。

在上面的代碼片段中,我想根據從方法調用獲得的數據計算dynamic_value。

我在哪裏計算「dynamic_value」的值?

我試過在計算before :eachbefore :all兩者都不起作用。

如果你用說明向我解釋呼叫週期,那也不錯。

在此先感謝。

+0

那麼這應該幫助你至少用「呼叫週期」http://www.wulftone.com/2012/01/22/rspec-gotchas-before-after-all-and-each/。除此之外,您的問題對我來說有點不清楚 – engineersmnky

+0

該博客不討論共享示例,以及何時對it_behaves_like進行預處理,以基於參數創建獨特的「it」塊。 –

+0

你問abouit一個描述塊的調用週期,並提到試圖使用'before:each'和'before:all'因此我的評論。否則你的問題是不清楚你的願望是什麼,因爲基於問題所要傳遞的唯一值是字符串「dynamic value」('expect(example).to eq「dynamic value」) – engineersmnky

回答

1

好吧我仍然不是100%確定我理解你的意圖,但我想我現在已經足以提供一個基本的解釋。我會實現這個概念,例如:

shared_examples_for "a page parser" do |dom_object,value| 
    it "the text in #{dom_object} should equal #{value} on #{url}" do 
    visit url 
    expect(page.find("##{dom_object}").text).to eq value 
    end 
end 

describe "example" do 
    let(:url) { "www.example.com?args=test" }  
    values_obtained_from_service_call = Service.call(url) 
    # We will assume this is something like [{dom_object: examplediv, value: "Hello World!"}] 
    values_obtained_from_service_call.each do |test| 
    it_should_behave_like "a page parser", test[:dom_object], test[:value] 
    end 
end 

這將遍歷的values_obtained_from_service_call和使用共享的例子測試他們所有。

正如我所說我仍不確定爲什麼你想這樣做,但功能上它應該工作。