包含ng-model的隔离范围的模拟和测试指令

时间:2016-03-25 19:39:02

标签: javascript angularjs unit-testing

我有一个我想要模拟和测试的指令。该指令将ngModel设置为double绑定并转换为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 未定义。我不确定在创建指令或调用测试时我缺少什么。任何方向都会非常感激。

1 个答案:

答案 0 :(得分:1)

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

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

更改是ng-model而不是ngModel。

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