【问题标题】:RSpec shared examples must not be sharedRSpec 共享示例不得共享
【发布时间】:2011-07-26 14:02:35
【问题描述】:

这让我大吃一惊……

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

即使对 shared_examples_for 的调用包含在描述块中也会发生这种情况(人们会认为应该限定示例)。

起初我尝试通过更改示例组的名称来解决这个问题(不理想,但我可以接受)。

但是当我想将示例组分解到一个单独的文件中以便我可以在多个规范文件之间共享它时,这成为一个更大的问题。

规范在单独运行时工作正常,但当我运行套件时,rspec 抱怨。

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

这当然是一个常见的问题。

我这里有什么遗漏吗?

【问题讨论】:

    标签: ruby-on-rails rspec


    【解决方案1】:

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

    【讨论】:

    • 谢谢大卫。关于如何在多个规范文件中使用共享示例的任何建议?似乎在 describe 块之外调用 shared_examples_for 会导致 rake 失败。
    • 对不起。这不是真的。即使我将它包装在describe 中,它也会失败。显然这与需要另一个文件有关。
    • 目的是在一个文件中定义它们并在其他文件中使用它们,所以如果你将它们放在不同的文件中,它肯定可以工作。惯例是将它们保存在 spec/support 下的文件中(例如 spec/support/shared_examples_for_xyz.rb),并从 spec/spec_helper.rb 中要求这些文件。
    • 谢谢大卫。将共享示例放在支持目录中并从 spec_helper 中请求就可以了。
    【解决方案2】:

    官方文档中有一些关于如何最好地处理这个问题的提示:

    https://www.relishapp.com/rspec/rspec-core/docs/example-groups/shared-examples

    TL;DR

    是的,共享示例是全球性的。 Ruby On Rails 的最佳实践:将共享示例放在 spec/support/foo_bar_shared_examples.rb 中,然后直接开始编写 shared_example,而不用任何 describe 块或其他方式包装。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多