Why do I get an undefined method 'have' error when running Rspec?

Viewed 11595

I recently upgraded to Rails 4 and everything works fine except for my Rspec tests.

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

When running these tests I get this error:

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)>'

Can anybody tell me what I am missing here?

I googled it already but nothing came up. The have method is actually fairly standard in Rspec and I can't see why it shouldn't work.

Thanks for any pointers.

3 Answers

OK, got it.

I had the wrong version number in my Gemfile.

Before:

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

After:

gem 'rspec-rails'
Related