我的测试有:
it("should clear the search field when the URL changes", function() {
createController();
$scope.init();
$scope.searchTerm = 'some term';
$location.path('/source');
$rootScope.$apply();
expect($scope.searchTerm).toBe('');
});
我的控制器是:
angularMoonApp.controller('SearchController', ['$scope', '$location', function ($scope, $location) {
$scope.init = function() {
$scope.$on('$routeChangeStart', function(next, current) {
$scope.searchTerm = '';
});
}
$scope.init();
}]);
看起来很简单!那么,当我在测试中更改位置时,为什么不会触发?
答案 0 :(得分:3)
你需要注入$ route,因为$ routeChangeStart是$ route触发的事件。
angularMoonApp.controller('SearchController', ['$scope', '$location', '$route', function ($scope, $location, $route) {
在不知道您的用例的情况下,如果您只是需要检测到网址已更改,则可以监听$ locationChangeStart。 $ locationChangeStart是从$ location触发的,因此您不需要注入任何新的依赖项。