Выполнение одного и того же теста несколько раз с разными настройками


Кто-нибудь знает хороший сухой способ выполнения одной и той же группы тестов в разных контекстах. Вот смехотворный пример желания выполнить одни и те же тесты с двумя разными настройками. Я не хочу повторять одни и те же тесты только для того, чтобы иметь разные настройки.

context 'cat' do
  setup do
    @object = cat
    ....
  end

  should 'walk' do
    assert @object.walk?
    ...
  end

  should 'run' do
    assert @object.run?
    ...
  end
end

context 'dog' do
  setup do
    @object = dog
    ....
  end

  should 'walk' do
    assert @object.walk?
    ...
  end

  should 'run' do
    assert @object.run?
    ...
  end
end
1 2

1 ответ:

Я уже делал это с merge_block раньше. Определите метод класса в своем тесте, который возвращает Proc ваших shoulds, а затем объедините его в случае необходимости.

def self.walk_and_run
  Proc.new do
    should 'walk' do
      assert @object.walk?
    end
    should 'run' do
      assert @object.run?
    end
  end
end

context 'cat' do
  setup do
    @object = cat
  end
  merge_block(&walk_and_run)
end

context 'dog' do
  setup do
    @object = dog
  end
  merge_block(&walk_and_run)
end