为什么运行Rspec时会出现未定义的方法’have’错误?

我最近升级到Rails 4,一切正常,除了我的Rspec测试。

require 'spec_helper' describe Invoice do before :each do @user = FactoryGirl.create(:activated_user) person = FactoryGirl.create(:person, :user => @user, :company => nil) @project = FactoryGirl.create(:project, :user => @user, :person_ids => [person.id], :invoice_recipient_id => person.id) end it "has a valid factory" do expect(FactoryGirl.build(:invoice, :project => @project, :user => @user)).to be_valid end it "is invalid without a number" do expect(FactoryGirl.build(:invoice, :project => @project, :user => @user, :number => nil)).to have(1).errors_on(:number) end end 

运行这些测试时,我收到此错误:

 Failure/Error: expect(FactoryGirl.build(:invoice, :project => @project, :user => @user, :number => nil)).to have(1).errors_on(:number) NoMethodError: undefined method `have' for # # ./spec/models/invoice_spec.rb:16:in `block (2 levels) in ' 

谁能告诉我这里缺少什么?

我已经google了,但没有出现。 在Rspec中, have方法实际上是相当标准的,我不明白为什么它不应该工作。

谢谢你的任何指示。

have一系列匹配器在RSpec 2.99中被弃用,并且自RSpec 3.0起已被移至单独的rspec-collection_matchers gem。 这在http://myronmars.to/n/dev-blog/2013/11/rspec-2-99-and-3-0-betas-have-been-released中进行了讨论,这也提供了建议的迁移方法到3.0。 具体来说,它建议安装/使用RSpec 2.99,以查看与在3.0中删除/移动的项目相关的弃用消息。

好的,我知道了。

我的Gemfile中有错误的版本号。

之前:

 gem 'rspec-rails', '~> 3.0.0.beta' 

后:

 gem 'rspec-rails' 

在最新版本的rspec中,“have”已被弃用,但你仍然可以通过rspec-collection_matchers gem使用它。

 # Gemfile ... gem 'rspec-collection_matchers', group: :test ... # spec/spec_helper.rb ... require 'rspec/collection_matchers' ....