2011-07-26 212 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的文件。 –