最近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 #<RSpec::ExampleGroups::Invoice_2:0x009ge29360d910>
# ./spec/models/invoice_spec.rb:16:in `block (2 levels) in <top (required)>'
誰かが私がここで欠けているものを教えてもらえますか?
私はすでにそれをググったが、何も出てこなかった。 have
メソッドは実際にはRspecでかなり標準的であり、なぜそれが機能しないのかわかりません。
ポインタをありがとう。
マッチャーの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に移行するための推奨アプローチも示しています。具体的には、3.0で削除/移動されたアイテムに関連する非推奨メッセージを表示するために、RSpec2.99をインストール/使用することをお勧めします。
Rspecの最新バージョンでは非推奨になっていますが、それでも rspec-collection_matchers gemを介して使用できます。
# Gemfile
...
gem 'rspec-collection_matchers', group: :test
...
# spec/spec_helper.rb
...
require 'rspec/collection_matchers'
....
はい、わかった。
Gemfileのバージョン番号が間違っていました。
前:
gem 'rspec-Rails', '~> 3.0.0.beta'
後:
gem 'rspec-Rails'