2016-05-17 9 views
0

Ich versuche, einen Test für einen Angular-Controller zu schreiben, der $ Route als injizierbar nimmt. Innerhalb des Controllers referenziert er dieses Objekt an verschiedenen Stellen, z. $route.current.params

Ich versuche, den besten Weg herauszufinden, diesen Test zu schreiben. Ich glaube nicht, dass die Verwendung des $ location-Dienstes, um die URL zu setzen, funktionieren wird, da ich Unit-Test-Funktionalität innerhalb des Controllers brauche, so dass ich den $ controller-Dienst brauche, um eine Instanz des Controllers zu erstellen.

Bis jetzt kann ich nur daran denken, den $ route-Dienst manuell zu verspotten, aber das scheint eine Menge Arbeit zu sein, die vorher hätte erledigt werden müssen. Das Problem ist, ich kann keine Beispiele finden. Der nächste, den ich finden kann, ist 'Injected $stateParams and $state into jasmine angular js test getting undefined', aber das ist nicht genau meine Situation.

Ich kann $ Route natürlich injizieren, aber es wird keine der spezifischen Eigenschaften der Route gesetzt haben. Was ist der allgemein akzeptierte Weg, um dies zu erreichen?

Antwort

0

Sofern es sich nicht um ein getestetes ngRoute-Modul handelt (was unwahrscheinlich ist), sollten seine Dienste in Komponententests simuliert werden, um die Anzahl der beweglichen Teile zu reduzieren.

$routeParams Service kann für seine Prägnanz als direkter Ersatz für $route.current.params, mit wenigen Ausnahmen in the manual erwähnt zu empfehlen:

Beachten Sie, dass die $ routeParams erst nach einer Routenänderung aktualisiert werden erfolgreich abgeschlossen. Dies bedeutet, dass Sie sich nicht auf $ routeParams verlassen können, die in Routendefinitionsfunktionen korrekt sind. Stattdessen können Sie $ route.current.params verwenden, um auf die Parameter der neuen Route zuzugreifen.