为什么赢得$ location.path会触发控制器中的$ routeChangeStart?

时间:2014-05-07 18:15:27

标签: angularjs unit-testing karma-jasmine

我的测试有:

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();
}]);

看起来很简单!那么,当我在测试中更改位置时,为什么不会触发?

1 个答案:

答案 0 :(得分:3)

你需要注入$ route,因为$ routeChangeStart是$ route触发的事件。

angularMoonApp.controller('SearchController', ['$scope', '$location', '$route', function ($scope, $location, $route) {

在不知道您的用例的情况下,如果您只是需要检测到网址已更改,则可以监听$ locationChangeStart。 $ locationChangeStart是从$ location触发的,因此您不需要注入任何新的依赖项。