Frage

Als ich von Proxy_Options erfuhr, begann ich damit, alle meine genannten Scopes zu testen. Aber dann kopierte ich einfach die Bedingungen Hash direkt aus dem Modell, so dass es nicht wirklich die Richtigkeit der Ergebnisse testete:

  po = {:conditions => "foo.created_at <= '#{Time.now.beginning_of_week}'"}
  assert_equal po, Foo.created_this_week

Ein anderer Ansatz besteht darin, positive und negative Beispiele zu finden und zu prüfen, ob sie in die Ergebnisse enthalten sind oder nicht:

  this_week = Foo.make(:created_at => Time.now)
  last_week = Foo.make(:created_at => 1.week.ago)
  assert Foo.created_this_week.include?(this_week)
  assert !Foo.created_this_week.include?(last_week)

Aber dies leistet keine gute Arbeit, um die Grenzen zu überprüfen, und wenn die Dinge komplizierter werden, haben Sie eine ganze Liste von Assert enthalten? Es scheint, dass es schöner ist, eine erwartete Ergebnisse zu erzielen und dann nur zu überprüfen, ob es übereinstimmt:

  Foo.make(:created_at => 1.week.ago)
  results = [Foo.make(:created_at => Time.now)]
  assert_equal results, Foo.created_this_week

Aber dann könnte der Test fehlschlagen, wenn die Ergebnisse in einer anderen Reihenfolge zurückgegeben werden als Sie geliefert haben. Ich denke, Sie könnten <=> in Ihrem Modell implementieren, damit Sie beide Arrays sortieren können. Aber es scheint, als sollte das nicht wirklich merkwürdig sein. Gibt es eine bessere Möglichkeit, diese Art von Suchmethoden zu testen? Oder zumindest ein allgemein anerkannter richtiger Weg?

War es hilfreich?

Lösung

Ich glaube, ich bin zu dem Schluss gekommen, dass es keinen "allgemein akzeptierten richtigen Weg" gibt, dies zu tun.

Ich denke, meine persönliche Lösung wird darin bestehen, das Testen einfacher benannter named_scopes zu stoppen und die Inclusers zu verwenden? Methode zum Testen komplizierterer Suchfunktionen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top