Hallo,
Am 01.02.2009 um 11:01 schrieb Christian Beier:
test "should get city from geocode" do
geocode = "52.409645,13.059826"
location = get_geocode(geocode)
assert_equal "Potsdam", assigns(:location)
end
Beim Ausführen des Tests, erhalte ich die Fehlermeldung:
1) Error:
test_should_get_city_from_geocode(HotspotsControllerTest):
NoMethodError: undefined method `get_geocode' for
#<HotspotsControllerTest:0x243f5ec>
Kann ich in Funktionalen Tests überhaupt private Methoden testen?
Ich sehe 2 Probleme. Zum einen rufst Du die Methode ja gar nicht auf
dem Controller-Objekt auf (das wäre dann eher
@controller.get_geocode()) und zum anderen ist die Methode wie Du
anmerktest private. Das kann man theoretisch umgehen:
@controller.send(:get_geocode, geocode)
Allerdings ist das ein typischer Code-Smell. Grundsätzlich würde ich 2
Dinge dazu anmerken (Wenn Sie erlauben, Sir):
- private Methoden in funktionalen Tests abtesten zu wollen ist ein
Code Smell. Funktionale Tests sollten (so sehe ich das) den Controller
"von aussen" testen. Es sind eben KEINE Unit-Tests. Du müsstest also
eher die Actions, die diese Methode verwenden auf ihre richtige
Funktion testen.
- Das ganze riecht allerdings danach als wäre die Methode
grundsätzlich im Controller falsch aufgehoben, da es sich vermutlich
um Domänen-Logik (klingt furchtbar auf deutsch, finde ich) handelt,
die üblicherweise ins Modell gehört. Wenn ich Deinen Code richtig aus
Deinen Schnippseln extrapoliere klingt das alles danach als würdest Du
eigentlich auf Deinem Modell ein virtuelles Attribute "geocode"
anlegen wollen, was genau das macht, was bei Dir die Methode macht.
Hoffe gehulfen zu haben und
Gruß,
Jan
_______________________________________________
rubyonrails-ug mailing list
rubyonrails-ug@headflash.com
http://mailman.headflash.com/listinfo/rubyonrails-ug