使用$ componentController进行测试时如何触发ng-change?

时间:2017-06-13 16:08:36

标签: javascript angularjs unit-testing tdd bdd

编辑:这个问题适用于Angular 1.5.7。

我正在使用$componentController测试我的组件,我想测试“&”在模型更改时调用绑定。

const component = {
    bindings: {
        myModel: '<',
        onChange: '&'
    }
}

该组件使用模板中的ng-change来处理任何模型更改:

<select ng-model="vm.myModel"
        ng-change="vm.handleMyModel()">
    ...
</select>

在组件控制器内部,handleMyModel执行一些操作并最终调用回调。

handleMyModel() {
   ...doStuff
   this.onChange();
}

但是,当我在测试中运行此代码时,handleMyModel函数永远不会被调用。

const bindings = {
    myModel: 'thanks for reading',
    onChange: function() {}
};
spyOn(bindings, 'onChange');

const vm = $componentController('myComponent', {}, bindings);
vm.$onInit();
vm.myModel = 'hello world'; // I want this reassignment to trigger handleMyModel();

expect(bindings.onChange).toHaveBeenCalled();

当我通过$componentController更改模型时,如何触发传入ng-change的函数?

我应该用$ compile直接测试DOM元素吗?然后找到选项并触发“更改”事件? (这种方法似乎比在$ componentController中更改模型更麻烦。)

感谢。

0 个答案:

没有答案