2011-07-26 208 views
12

这让我惊讶......RSpec的共享实例不能共享

看来,你不能RSpec的2个共享例如组的任何地方你的项目中使用相同的名称。如果你这样做了,那么当你运行rake spec(运行所有规格)时,rspec会抱怨共享的示例组被声明为非唯一名称。

即使调用shared_examples_for包含在describe块中(假定应该对范例进行范围),也会发生这种情况。

起初我试图通过更改示例组的名称(不理想,但我可以忍受它)来解决此问题。

但是,当我想将示例组分解为单独的文件以便我可以在多个spec文件之间共享时,这变得更加棘手。

当运行隔离时,规范工作正常,但是当我运行套件时,rspec抱怨。

`ensure_shared_example_group_name_not_taken': \ 
Shared example group 'a person' already exists (ArgumentError) 

肯定这是一个常见问题。

有什么我在这里失踪?

回答

11

从rspec 2.6开始,共享示例是全局的。您可以在示例组中声明它们,但它们不限于该组。

+0

谢谢大卫。有关如何在多个spec文件中使用共享示例的建议?看起来,调用'describe'块之外的'shared_examples_for'会导致'rake'失败。 –

+0

对不起。这不是真的。它甚至在我用'describe'包装时失败。显然这是需要另一个文件。 –

+4

其目的是将它们定义在一个文件中,并将它们用于其他n个文件,因此如果您将它们放在不同的文件中,它肯定会起作用。约定是将它们保存在规范/支持文件(例如spec/support/shared_examples_for_xyz.rb)中,并要求来自spec/spec_helper.rb的文件。 –