mocking和测试指令,隔离范围包含ng模型

mocking and testing directive with isolate scope containing ng-model

本文关键字:范围 包含 ng 模型 隔离 测试 指令 mocking      更新时间:2023-09-26

我有一个指令要模拟和测试。该指令的ngModel设置为双重绑定并transclude true

scope: {'ngModel': '=' } 
transclude: true

我要测试的规范非常简单。

$el.find('input').prop('checked', $scope.ngModel);

在我的单元测试中,我创建了一个beforeEach,并创建了测试ngModel=checked的指令

   element = angular.element("<div *directiveName* ><div><input type='"checkbox'" ngModel=checked /> </div></div>");
        $rootScope = $rootScope.$new();
        $compile(element)($rootScope);
        $rootScope.$digest(element);
        scope = element.isolateScope();

通常我会将scope设置为等于element.scope()。我会调用右边的isolateScope()方法?

我相信,由于我正在将范围设置为等于元素isolateScope(),所以规范应该像一样简单

        expect(scope.ngModel).to.equal('checked');

但是,scope.ngModel未定义。我不确定在创建指令或调用测试时遗漏了什么。任何指示都将不胜感激。

您没有正确地将值传递到元素中。应该是:

element = angular.element("<div *directiveName* ><div><input type='"checkbox'" ng-model=checked /> </div></div>");

变化是ng模型而不是ngModel。

我还建议在指令中为自定义属性使用不同的名称,因为这与内置的angular指令混淆。