我正在尝试学习如何使用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. ....
我已经阅读了我认为关于这个问题的文档here,但是我无法理解它/看到我案例的内容.
这是我的共享示例:
# 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
我试图在用户模型和公司模型中使用它.这是它的样子:
# 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
根据我上面链接的Rspec文档中的建议,我尝试将include_examples更改为it_behaves_like,但这没有帮助.我还完全注释掉了company_spec.rb所以只有一个使用共享示例的规范,我仍然收到警告.
任何人都可以帮助我看看这里发生了什么,以及在这种情况下我应该做些什么来避免警告?
解决方法
我在Rspec Github的
issue中找到了答案:
Just in case someone googles and lands here. If putting your file with
shared examples into support folder has not fixed the following
error…Make sure your filename does not end with_spec.rb.