2014-09-08 1 views
0

J'essaie de simuler un changement de route réussi pour écrire un test. Une url c'est-à-dire 'example /: id' a été enregistrée en utilisant routeProvider.Test du contrôleur avec les paramètres routeChangeSuccess mais manquants

$scope.$on('$routeChangeSuccess', function(angularEvent, current, previous) { 
     var super_important_id = current.pathParams.id 
     // Do something with super_important_id 
}) 

J'ai essayé

$location.path('/example/0') 
$rootScope.$apply(); 
$rootScope.$broadcast('$routeChangeSuccess') 

Mais il jette toujours cette erreur quand je lance le test

TypeError: 'undefined' is not an object (evaluating 'current.pathParams') 

Comment puis-je railler avec succès le changement d'itinéraire événement succès et faire remplir dans pathParams?

Répondre

2

Si vous diffusez manuellement l'événement $routeChangeSuccess, vous devez fournir les arguments pour cela. Quelque chose comme ceci:

var objToMockCurrentRoute = { 
    pathParams: { 
    id: "MY_ID" 
    //any other needed properties 
    } 
    //any other needed properties 
} 
$rootScope.$broadcast('$routeChangeSuccess', objToMockCurrentRoute); 

Sans faire cela, current est juste undefined, ce qui explique l'erreur que vous voyez.

De plus, cela signifie que vous n'avez pas besoin d'appeler $location.path.

+0

Pourquoi l'emplacement ne peut-il pas déclencher l'événement routechangesuccsss? – allenylzhou

+0

Je ne connais pas la réponse à votre question, mais il semble que la plupart des gens testent l'événement manuellement plutôt que d'avoir un déclenchement angulaire de l'événement. Voir http://stackoverflow.com/questions/22447988/how-to-mock-trigger-a-routechangesuccess-in-angular-unit-tests – dnc253

Questions connexes