Ruby on rails 使用不同的设置多次运行同一测试

Ruby on rails 使用不同的设置多次运行同一测试,ruby-on-rails,testunit,shoulda,Ruby On Rails,Testunit,Shoulda,有人知道在不同环境下运行同一组测试的好方法吗。这是一个荒谬的例子,想要用两种不同的设置运行相同的测试。我不想重复同样的测试,这样我就可以有不同的设置 context 'cat' do setup do @object = cat .... end should 'walk' do assert @object.walk? ... end should 'run' do assert @object.run? ... en

有人知道在不同环境下运行同一组测试的好方法吗。这是一个荒谬的例子,想要用两种不同的设置运行相同的测试。我不想重复同样的测试,这样我就可以有不同的设置

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

我以前用过
merge\u block
。在测试中定义一个类方法,该方法返回should的
Proc
,然后在适当的地方将其合并

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

这是可行的,但我很难将这个过程转移到上下文中,这样我的测试就不会变得混乱。一旦我将proc移动到上下文中,我就不知道如何在merge_block语句中引用它。你知道我的意思吗?是的,我知道你的意思。因为它需要是一个类方法,所以它必须位于上下文之外。您可以将上下文中的变量设置为Proc并将其合并,而不是将其定义为返回Proc的方法。不过看起来还是有点乱。