Шаблоны для доступа к иерархии субъектов в RSpec

При использовании 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 с помощью этого типа автоматического управления иерархией субъектов?

10
задан zishe 27 May 2014 в 21:55
поделиться