2016-04-20 17 views
0

私はコントローラで$scope.$watchという単位テストをしようとしていますが、Error: Unexpected request: GET /locales/en.jsonのような予期しないリクエストエラーがテストコードの$scope.$apply()で発生する理由がわかりません。それはコントローラの他の部分です、なぜここに関わっていますか?

私は$scope.$applyとコメントしてもこのエラーは発生しませんが、もちろんその場合は$ watchを起動できません。 $httpBackend.whenGET('/locales/en.json').respond('');のようなリクエストを模擬しなければなりませんか?

コントローラ:

$scope.$watch(function(){ 

    return $location.path(); 

    }, function() { 

    $scope.currentPath = $location.path().match(/\/[a-z0-9A-Z_]*/)[0]; 

    $scope.currentNav = 'menu.' + $scope.currentPath.replace('/', ''); 

}); 

ジャスミン:

describe('homeController', function() { 
    beforeEach(module('homeApp')); 

    var $rootScope, $scope, controller, $httpBackend, $location, $route, $window 

    beforeEach(inject(function($controller, _$rootScope_, _$httpBackend_, _$location_, _$route_, _$window_) { 
     $rootScope = _$rootScope_; 
     $scope = $rootScope.$new(); 
     controller = $controller('homeController', {$scope: $scope}); 
     $httpBackend = _$httpBackend_; 
     $location = _$location_; 
     $route = _$route_; 
     $window = _$window_; 
    })); 

    describe('watch path', function() { 

     it('should change currentPath and currentNav', function() { 
      $location.path('/dashboard'); 
      $scope.$apply(); 

      $location.path('/images'); 
      $scope.$apply(); 

      expect($scope.currentPath).toBe('/images') 
      expect($scope.currentNav).toBe('menu.images') 
     }) 
    }) 
}) 

更新:それは必要なすべてのHTTPリクエストをからかった後働いて

。しかし、依然としてそれらの要求に影響を与える理由を知りたい。

+0

'$ scope.watch'は' $ scope.apply'を呼び出すパラメータを想定していますので、ここではあなたの$ scope.watchが問題を引き起こしています –

答えて

0

上記の例では、何も見ていません。監視中のオブジェクトの値が変化すると、$ watch関数が呼び出されます。これは、オブジェクトの古い値と新しい値の両方を返します。

$scope.someValue = 0; 

    $scope.$watch(
    "$scope.someValue", 
    function handleFooChange(newValue, oldValue) { 
    console.log("$scope.someValue:", newValue); 
    } 
); 

ここsomeValueのは、変更のために監視されています。 someValueの値が変更されると、$ watchのコールバック関数が呼び出されます。

関連する問題