При использовании RSpec для тестирования глубоко вложенных структур данных я обнаружил необходимость определять субъекты во вложенных контекстах в терминах субъектов в содержащих контекстах. Я тщательно просмотрел, но не нашел примеров того, как поступить без определения многих переменных. Это усложняет спецификации и ограничивает возможность повторного использования спецификаций. Мне любопытно, есть ли способ сделать это в RSpec в его нынешнем виде, и если нет, то каков был бы хороший способ подойти к проблеме.
Прямо сейчас мой код выглядит примерно так:
context 'with a result which is a Hash' do
before do
@result = get_result()
end
subject { @result }
it { should be_a Hash }
context 'with an Array' do
before do
@array_elem = @result[special_key]
end
subject { @array_elem }
it { should be_an Array }
context 'that contains a Hash' do
before do
@nested_hash = ...
end
subject { @nested_hash }
...
end
end
end
Вместо этого я лучше напишу что-нибудь вроде:
context 'with a result which is a Hash' do
subject { get_result }
it { should be_a Hash }
context 'with an Array' do
subject { parent_subject[special_key] }
it { should be_an Array }
context 'that contains a Hash' do
subject { do_something_with(parent_subject) }
...
end
end
end
Как можно расширить RSpec с помощью этого типа автоматического управления иерархией субъектов?