私はコントローラで$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リクエストをからかった後働いて
。しかし、依然としてそれらの要求に影響を与える理由を知りたい。
'$ scope.watch'は' $ scope.apply'を呼び出すパラメータを想定していますので、ここではあなたの$ scope.watchが問題を引き起こしています –