如何避免Rspec共享示例'先前定义'的警告?

six*_*bit 9 ruby testing warnings rspec ruby-on-rails

我正在尝试学习如何使用Rspec的共享示例功能,并在运行测试时收到警告:

WARNING: Shared example group 'required attributes' has been previously defined at:
  /Users/me/app/spec/support/shared_examples/required_attributes_spec.rb:1
...and you are now defining it at:
  /Users/me/app/spec/support/shared_examples/required_attributes_spec.rb:1
The new definition will overwrite the original one.
....
Run Code Online (Sandbox Code Playgroud)

我已经阅读了我认为这里有关于这个问题的文档,但是我无法理解它/看到我案例的内容.

这是我的共享示例:

# spec/support/shared_examples/required_attributes_spec.rb

shared_examples_for 'required attributes' do |arr|
  arr.each do |meth|
    it "is invalid without #{meth}" do
      subject.send("#{meth}=", nil)
      subject.valid?
      expect(subject.errors[meth]).to eq(["can't be blank"])
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我试图在User模型和Company模型中使用它.这是它的样子:

# spec/models/user_spec.rb

require 'rails_helper'

describe User do
  subject { build(:user) }
  include_examples 'required attributes', [:name]
end

# spec/models/company_spec.rb

require 'rails_helper'

describe Company do
  subject { build(:company) }
  include_examples 'required attributes', [:logo]
end
Run Code Online (Sandbox Code Playgroud)

根据我上面链接的Rspec文档中的建议,我尝试过更改include_examplesit_behaves_like,但这没有帮助.我也company_spec.rb完全注释掉,所以只有一个使用共享示例的规范,我仍然收到警告.

任何人都可以帮我看看这里发生了什么,以及在这种情况下我应该做些什么来避免警告?

six*_*bit 27

我在Rspec Github上找到了这个问题的答案:

以防有人谷歌和土地在这里.如果将带有共享示例的文件放入支持文件夹中,则修复了以下错误...确保您的文件名不以_spec.rb.