我有一个需要ngModel的指令。在其链接函数中,它在ngModel控制器上调用$ setViewValue。我想测试在正确的条件下调用$ setViewValue,但我无法解决如何添加我的间谍...
这是我的简化代码:
指令
angular.module("myApp").directive("myDir", function()
{
return {
restrict: "A",
require: ["ngModel"],
link: function(scope, element, attrs, ctrls)
{
var ngModel = ctrls[0];
......
function changeHandler(event) {
ngModel.$setViewValue(ckeditor.getData());
}
}
};
});
HTML:
<textarea my-dir ng-model="myData"></textarea>
我希望我的测试类似于:
describe("updating text in ckeditor", function() {
it("should update model value", function() {
$compile("<textarea my-dir ng-model='text'></textarea>")(scope);
spyOn(ngModel, "$setViewValue");
// trigger change handler
expect(ngModel.$setViewValue).toHaveBeenCalled();
});
});
谢谢!
答案 0 :(得分:0)
我无法真正找到如何在链接功能中模拟ngModel,但我找到了一种替代方法,我可以测试它,无论如何都要好得多,如果有帮助的话,我会发布。
因此,我只是测试传入的属性上的值已经更改为ngModel的值,而不是窥探$ setViewValue函数。看起来非常明显。
无论如何,这是我的测试
describe("updating text in ckeditor", function() {
it("should update model value", function() {
scope = $rootScope.$new();
scope.text = "";
$compile("<textarea my-dir ng-model='text'></textarea>")(scope);
spyOn(ckeditorInstance, "getData").and.returnValue("updated text");
// trigger change handler...
expect(scope.text).toEqual("updated text");
});
});