Подтвердить что ты не робот

Почему при запуске Rspec я получаю ошибку undefined "иметь"?

Недавно я обновился до 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)>'

Может ли кто-нибудь сказать мне, что мне здесь не хватает?

Я уже разобрался в Google, но ничего не получилось. Метод have на самом деле довольно стандартный в Rspec, и я не понимаю, почему он не должен работать.

Спасибо за любые указатели.

4b9b3361

Ответ 1

Семейство матриц have было устарело в RSpec 2.99 и было перемещено в отдельный rspec-collection_matchers камень с RSpec 3.0. Это обсуждается в 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.

Ответ 2

ОК, получилось.

У меня был неправильный номер версии в моем Gemfile.

До:

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

После:

gem 'rspec-rails'