Rspec gleich Methode
Von dem, was ich verstanden habe, das der gleichen Methode überprüft, ob das Objekt derselben.
person = Person.create!(:name => "David")
Person.find_by_name("David").should equal(person)
Sollte das true sein.
Aber gibt es da nicht zwei verschiedene Objekte hier?
Wie konnten zwei Objekte gleich sind? Ich verstehe nicht, dass.
Kommentar zu dem Problem
Die zwei verschiedene Objekte beziehen Sie sich?
@jtbandes: in der ersten Zeile wird ein Objekt zurückgegeben, die "person" bezeichnet werden wird. in der zweiten Zeile wird ein Objekt zurückgegeben, und dieses Objekt sollte nicht gleich auf die person. also nicht, dass zwei Objekte?
Entweder a) genau dasselbe Objekt zurückgegeben werden konnte; oder b) das zweite Objekt könnte gleich sein (durch einen eigenen
gleich?
oder eine andere Methode), zu dem ersten, wie mit den gleichen Eigenschaften (in diesem Fall name
). Lesen Sie die ActiveRecord::Base docs. InformationsquelleAutor der Frage never_had_a_name | 2010-08-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
equal
prüft, ob die Referenz gleich ist. Es entspricht derObject#equal?
Methode. Sie verwenden möchten==
Vergleich dieser Objekte.InformationsquelleAutor der Antwort Marc-André Lafortune
Rails-und RSpec-Gleichheit-tests haben eine Vielzahl von Möglichkeiten.
Rails 3.2 ActiveRecord::Base nutzt das
==
Gleichheit matcher.True liefert zwei verschiedene Möglichkeiten:
self
ist exakt das gleiche Objekt als Vergleichs-Objektself
ist vom gleichen Typ wie der Vergleich von Objekt und hat die gleiche IDBeachten Sie, dass ActiveRecord::Base
==
Methode, die als aliaseql?
. Dies ist anders als typische Ruby-Objekte, die definieren==
undeql?
anders.RSpec 2.0 hat diese Gleichheit Matcher in rspec-expectations:
RSpec hat auch zwei Geschlechter Matcher bestimmt, um mehr von einer DSL-Gefühl zu Ihnen:
In Ihrem Beispiel, Sie erstellen einen Datensatz dann, es zu finden.
So haben Sie zwei Möglichkeiten zum testen
#find_by_name
:Testen, wenn es ruft das exakt gleiche Objekt ODER eine gleichwertige Person-Datensatz mit der gleichen ID, dann verwenden Sie
should ==
oder sein äquivalenta.should eql
oder seinen DSL-versionshould eq
Um zu testen, ob es verwendet exakt die gleiche Objekt NICHT eine gleichwertige Person-Datensatz mit der gleichen ID, dann verwenden Sie
should equal
oder seinen DSL-versionshould be
InformationsquelleAutor der Antwort joelparkerhenderson