RSPEC ==/EQL kann die "gleichen" Dinge nicht vergleichen
-
27-10-2019 - |
Frage
Ich habe einen Controller -Indextest, der einen ActivereCord -Bereich erhält. Der Test sieht derzeit so aus (einschließlich einiger Inline -Debugging -Sachen):
describe "GET index" do
it "assigns all schools as @schools" do
get :index
puts assigns(:schools).class
puts School.populated.class
assigns(:schools).should == School.populated
end
end
Die Ausgabe ist Folgendes:
ActiveRecord::Relation
ActiveRecord::Relation
expected: []
got: [] (using ==)
Diff:
Dies ist definitiv nicht das erste Mal, dass ich dies in den letzten Versionen von Rails und RSPEC hatte. Früher würde ein Mitarbeiter die Gegenstände einfach in a einwickeln to_a
Um sie zu vergleichen, was ich ein bisschen schmutzig finde und wahrscheinlich keine gute Lösung.
Irgendwelche Ideen? Ich bin neugierig, warum es sich für unterschiedlich hält und wie derselbe Test in älteren Versionen von Rails und/oder RSPEC bestand.
Lösung
EQL ist das gleiche wie ==. Autor von RSPEC -Gesprächen verwendet nur nicht !=, verwenden sollte nicht stattdessen
actual.should == expected
#is interpreted as this:
actual.should.==(expected)
#This is not true for !=. Ruby interprets this: actual.should != expected
#as follows:
!(actual.should.==(expected))
Aktualisieren: Relation bietet ein fauler Lastmuster, sodass Sie keine ausgeführte Abfrage im Schritt haben. Es bedeutet das Feuer die Abfrage auf erste Anfrage
Andere Tipps
Wenn Sie Arrays vergleichen möchten, sollten Sie schreiben
assigns(:schools).all.should =~ School.populated.all