0

您如何测试 angularjs 指令的模板函数的属性,其中属性同时具有链接函数中定义的函数和角度绑定值?这是指令。

var app = angular.module('mmApp', []);
app.directive('mmField', function(){

return {
    'restrict': 'E',
    'priority': 5,
    'replace': true,
    'scope': {
        'path': '@',
        'label': '@',
        'type': '@',
        'editable': '@'
    },
     //this is the template function and this is where labelText() does not evaluate at least not where I test it.
    'template': '<div class="mm-field">' +
        '<label for="{{inputId()}}" ng-show="labelText()">{{labelText()}}</label> ' +
        '</div>',

    'link': function (scope, element, attrs) {
        var query = null;
        //this is where the labelText() function is defined
        scope.labelText = function () {
            var labelAttrValue = (scope.label || attrs['withLabel'] || '');
            // cater for custom labels specified via the label or with-label attribute
            if (labelAttrValue && labelAttrValue.toLowerCase() !== 'true' && labelAttrValue.toLowerCase() !== 'false') {
                return (labelAttrValue || '') + ':';
            } else if (labelAttrValue.toLowerCase() !== 'false' && scope.field) {
                return (scope.field['name'] || 'FIELD_NAME_NOT_DEFINED') + ':';
            } else if (labelAttrValue.toLowerCase() == 'false') {
                return '';
            } else {
                return 'Loading...';
            }
        };
    }
])

这是指令在 html 页面上的位置。

<mm-field with-label editable="false" path="{{rootPath}}.name"></mm-field>

我正在使用 mocha 和 chai 测试套件。这就是我想要测试它的方式。

describe('InputId', function () {
    it.only('should generate an ID', function () {
        var element = $($compile('<mm-field with-label="MONKEY" editable="false"                                                                             path="something.name"></mm-field>' +
            '</div>')($scope));
        $scope.$digest();

        expect(element.find('label').attr('ng-show')).to.equal('an evaluated value of  labelText()');
    });
});
4

0 回答 0