ruby on rails - rails - ¿Por qué aparece un error de ''tener'' un método no definido al ejecutar Rspec?
factorybot gem (3)
En las últimas versiones de rspec "have" está en desuso, pero aún puedes usarlo mediante la gema rspec-collection_matchers .
# Gemfile
...
gem ''rspec-collection_matchers'', group: :test
...
# spec/spec_helper.rb
...
require ''rspec/collection_matchers''
....
Recientemente me actualicé a Rails 4 y todo funciona bien, excepto en mis pruebas 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
Al ejecutar estas pruebas me sale este 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)>''
¿Alguien puede decirme lo que me estoy perdiendo aquí?
Ya lo busqué en Google pero no surgió nada. El método have
es bastante estándar en Rspec y no veo por qué no debería funcionar.
Gracias por cualquier punteros.
La familia have
de matchers quedó en desuso en RSpec 2.99 y se ha movido a una rspec-collection_matchers separada rspec-collection_matchers RSpec 3.0. Esto se discute en http://myronmars.to/n/dev-blog/2013/11/rspec-2-99-and-3-0-betas-have-been-released , que también brinda el enfoque sugerido para migrar a 3.0. Específicamente, recomienda instalar / usar RSpec 2.99 para ver los mensajes de desaprobación asociados con los elementos que se eliminaron / movieron en 3.0.
Ok lo tengo.
Tuve el número de versión incorrecto en mi Gemfile.
Antes de:
gem ''rspec-rails'', ''~> 3.0.0.beta''
Después:
gem ''rspec-rails''