Warum bekomme ich eine " undefined method 'haben' Fehler beim ausführen von Rspec?
Ich vor kurzem ein Upgrade auf Rails 4 und alles funktioniert gut, außer für meine 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
Beim ausführen dieser tests bekomme ich diesen Fehler:
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)>'
Kann mir jemand sagen, was ich hier vermisst?
Ich es schon gegoogelt, aber nichts kam. Die have
Methode ist eigentlich ziemlich standard in Rspec und ich kann nicht sehen, warum es nicht funktionieren sollte.
Vielen Dank für jegliche Hinweise.
- Versuchen Sie, vorbei an einem block rechnen und nicht einer Instanz (D. H., erwarten { })
- Danke, aber das ändert nichts. Noch immer die gleichen Fehler.
- OK, gebucht einige weitere details vor.
- Für mich ist alles richtig (genau so, wie die offiziellen Beispiele). Wenn ich du wäre würde ich versuchen zu überprüfen, in diesem Fall
expect(Invoice.new).to have...
(verwenden Sie die Klasse, statt der Fabrik - Sie haben den gleichen Fehler?). Dann versuchen Sie, die version prüfen und vielleicht zu aktualisieren Juwel rspec-rails. Eine weitere Idee: nutzt du spork, zeus oder smth like this? Vielleicht etwas falsch ist inspec_helper.rb
- Sorry about that, den Sie gerade entfernt die ersten beiden Zeilen. Jetzt sieht es genau wie in meiner app.
- Ich lief einfach
rails g rspec:install
wieder aktualisieren meinespec_helper.rb
- Datei. Dann versuchteexpect(Invoice.new).to have(1).errors_on(:number)
. Aber es gibt mir genau die gleichen Fehler wie vorher. - OK, gelöst und unten geschrieben. Vielen Dank für Ihre Hilfe!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
have
Familie der Matcher wurde deprecated in RSpec 2,99 und wurde verschoben, um eine separate rspec-collection_matchers Juwel von RSpec 3.0. Dies wird beschrieben in http://myronmars.to/n/dev-blog/2013/11/rspec-2-99-and-3-0-betas-have-been-released, das gibt auch der vorgeschlagene Ansatz zur Migration von 3.0. Konkret empfiehlt die Installation/Verwendung von RSpec 2.99, um zu sehen, veraltete Nachrichten im Zusammenhang mit der Lieferung von waren, die entfernt/verschoben werden, die in 3.0.In den neuesten Versionen von rspec "haben" als veraltet, aber man kann immer noch nutzen es über rspec-collection_matchers gem.
OK, habe es.
Hatte ich die falsche Versionsnummer in meinem Gemfile.
Bevor:
Nach: