使用动态计算参数调用共享示例

时间:2016-12-05 18:20:43

标签: ruby rspec capybara integration-testing

我是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中进行计算,但两者都无效。

如果你用describe解释我的呼叫周期也会很好。

提前致谢。

1 个答案:

答案 0 :(得分: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并使用共享示例测试它们。

正如我所说,我仍然不确定你为什么要这样做,但功能上它应该有效。