使用ngModel的单元测试角度指令

mco*_*ham 6 unit-testing angularjs angularjs-directive karma-jasmine

我正在尝试对使用ngModel并遇到困难的指令进行单元测试.似乎我的指令的链接功能永远不会被调用...

这是我的指令代码:

coreModule.directive('coreUnit', ['$timeout', function ($timeout) {
    return {
        restrict: 'E',
        require: '?ngModel',
        template: "{{output}}",
        link: function (scope, elem, attrs, ngModelCtrl) {
            ngModelCtrl.$render = function () {
                render(ngModelCtrl.$modelValue);
            };
            console.log("called");
            function render(unit) {
                if (unit) {
                    var output = '(' +
                        unit.numerator +
                        (unit.denominator == '' ? '' : '/') +
                        unit.denominator +
                        (unit.rate == 'NONE' || unit.rate == '' ? '' : '/' + unit.rate) +
                        ')';
                    scope.output = output == '()' ? '' : output;
                }
            }
        }
    }
}]);
Run Code Online (Sandbox Code Playgroud)

这是我的测试规范:

describe('core', function () {
    describe('coreUnitDirective', function () {
        beforeEach(module('core'));

        var scope,
            elem;

        var tpl = '<core-unit ng-model="myUnit"></core-unit>';

        beforeEach(inject(function ($rootScope, $compile) {
            scope = $rootScope.$new();
            scope.myUnit = {};
            elem = $compile(tpl)(scope);
            scope.$digest();
        }));

        it('the unit should be empty', function () {
            expect(elem.html()).toBe('');
        });

        it('should show (boe)', function () {
            scope.myUnit = {
                numerator: 'boe',
                denominator: "",
                rate: ""
            };
            scope.$digest();
            expect(elem.html()).toContain('(boe)');
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

控制台日志输出"被叫"永远不会发生,显然我的测试规范中的元素永远不会更新.

我究竟做错了什么??

mco*_*ham 3

事实证明,我没有在 karma.config 文件中包含该指令:S。添加它解决了我的所有问题。