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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top