我最近升级到了Rails4,除了我的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 #<RSpec::ExampleGroups::Invoice_2:0x009ge29360d910>
# ./spec/models/invoice_spec.rb:16:in `block (2 levels) in <top (required)>'
有谁能告诉我,我错过了什么?have
方法实际上在Rspec中是相当标准的,我不明白为什么它不应该工作。
谢谢你的指点。
3条答案
按热度按时间rvpgvaaj1#
have
家族的匹配器在RSpec 2.99中被弃用,并且从RSpec 3.0开始被移动到一个单独的rspec-collection_matchers gem中。这在https://rspec.info/blog/2013/11/rspec-2-99-and-3-0-betas-have-been-released/中进行了讨论,它也给出了迁移到3.0的建议方法。具体来说,它建议安装/使用RSpec 2.99,以便查看与3.0中删除/移动的项目相关的弃用消息。vc9ivgsu2#
在最新版本的rspec中,“have”被弃用,但你仍然可以通过rspec-collection_matchers gem使用它。
ocebsuys3#
好的,知道了。
我在我的Gemfile中有错误的版本号。
之前:
之后: