如何在嵌套的Rspec共享示例中传递变量两个级别?

时间:2015-08-20 20:06:18

标签: ruby testing rspec rspec3

基本上,我有一堆共享的例子。我认为这会有效,但我正在传递的stack level too deep变量。

shared_examples 'Foo' do
  # top level shared example passes values
  # to a lower-level shared example.
  it_behaves_like 'Bar' do
    let(:variable) { variable }
  end

  it_behaves_like 'Baz'
end

shared_examples 'Bar' do
  it { expect(variable).to veq('value')
end

规范:

describe SomeClass do
  it_behaves_like 'Foo' do
    let(:variable) { 'value' }
  end
end

我认为共享示例保留了自己的上下文,为什么会导致问题?

1 个答案:

答案 0 :(得分:1)

您的代码中有递归:

let(:variable) { variable }

将一遍又一遍地召唤自己

规范将自动传递其变量,因此这将起作用:

shared_examples 'Foo' do
  it_behaves_like 'Bar'
  it_behaves_like 'Baz'
end

shared_examples 'Bar' do
  it { expect(variable).to eq('value') }
end

describe SomeClass do
  let(:variable) { 'value' }
  it_behaves_like 'Foo'
end