2015-08-20 3 views
1

В принципе, у меня есть куча общих примеров. Я думал, что это сработает, но я получаю stack level too deep от переменной, которая передается.Как передать переменную два уровня во вложенном примере Rspec?

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

Я думаю, что у вас есть рекурсия в вашем коде: 'let (: variable) {variable}' вызывает себя – mhutter

ответ

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