объем остается неопределенным в модульном тестировании angularjs - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь выполнить юнит-тестирование для следующего кода, я написал следующий код для юнит-тестирования, как показано ниже, я перепробовал так много способов работы, но я получаю ошибку:

'Не удается прочитать свойство 'num' из неопределенного '

Я не знаю, почему область не установлена ​​должным образом. Если у вас есть идеи по этому поводу, не могли бы вы дать несколько советов?

var angular = require('angular');
require('angular-mocks');

describe('test directive', function () {

    let $rootScope;
    let $compile;
    let scope;
    let newScope;
    let element;

    beforeEach(angular.mock.inject(function (_$compile_, _$rootScope_) {
        $compile = _$compile_;
        $rootScope = _$rootScope_;
    }));

    describe('test directive', function () {

        beforeEach(function () {
            newScope = $rootScope.$new();
            element = $compile('<test-directive></test-directive>')(newScope);
            newScope.$digest();
            scope = element.isolateScope();
        });

        fit('scope initialized', function () {
            expect(scope.num).toEqual(1);
        });

    });
});
module.exports = module.directive('testDirective', ['$rootScope', '$scope', function($rootScope, $scope) {

    return {
        template: require('./test.html'),
        restrict: 'E',
        controller: [
            '$scope',
            function ($scope) {
                    $scope.num = 1

                    $scope.sum = function(a, b) {
                        return a + b;
                    }

            }]
    }
}]);

1 Ответ

0 голосов
/ 06 ноября 2019

Переменная scope равна undefined, поскольку тестируемая директива не имеет изолированной области видимости. Вместо этого используйте область действия элемента:

    beforeEach(function () {
        newScope = $rootScope.$new();
        element = $compile('<test-directive></test-directive>')(newScope);
        newScope.$digest();
        ̶s̶c̶o̶p̶e̶ ̶=̶ ̶e̶l̶e̶m̶e̶n̶t̶.̶i̶s̶o̶l̶a̶t̶e̶S̶c̶o̶p̶e̶(̶)̶;̶
        scope = element.scope();
    });

    fit('scope initialized', function () {
        expect(scope.num).toEqual(1);
    });

Имейте в виду, что директива имеет фатальный недостаток. Он может использовать его только один раз в заданном объеме.

...