Как я могу проверить $ watch в Angular

0

Я пытаюсь выполнить единицу теста $scope.$watch в контроллере, я не знаю, почему $scope.$apply() в тестовом коде вызывает непредвиденную ошибку запроса, такую как Error: Unexpected request: GET/locales/en.json. Эта другая часть контроллера, почему она здесь участвует?

Однако эта ошибка не возникает, если я комментирую $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, вызывающий проблему
Теги:
jasmine

1 ответ

-1

В приведенном выше примере вы ничего не наблюдаете. Функция $ watch будет вызываться, когда изменяется значение наблюдаемого объекта. Он вернет вам как старое, так и новое значение для объекта.

$scope.someValue = 0;

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

Здесь someValue просматривается для изменения. Как только значение someValue изменится, будет вызвана функция обратного вызова $ watch.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню