Knockout.js 如何在Jasmine测试中重置敲除绑定
我正试图用jasmine为击倒功能编写测试,如下所示,我得到以下错误: 错误:不能对同一元素多次应用绑定 我确实尝试过重置ko as,但结果是一样的Knockout.js 如何在Jasmine测试中重置敲除绑定,knockout.js,binding,jasmine,reset,Knockout.js,Binding,Jasmine,Reset,我正试图用jasmine为击倒功能编写测试,如下所示,我得到以下错误: 错误:不能对同一元素多次应用绑定 我确实尝试过重置ko as,但结果是一样的 afterEach(()=>{ ko.cleanNode($('#MobileMainNavLink')[0]); ko.cleanNode($('#sidebar-wrapper')[0]); }); 基于ko文档,cleanNode是一个内部函数,不是API的一部分 我使用的是ko 3.2和ja
afterEach(()=>{
ko.cleanNode($('#MobileMainNavLink')[0]);
ko.cleanNode($('#sidebar-wrapper')[0]);
});
基于ko文档,cleanNode是一个内部函数,不是API的一部分
我使用的是ko 3.2和jasmine 1.5,而不是显式地将绑定应用于节点。因此,我相信这将适用于您的文档.body。这就解释了你的错误,你没有清洁身体 ko.应用绑定(测试主题) 参考: 如果您想知道ko.applyBindings的参数是什么 第一个参数表示要使用的视图模型对象 它激活的声明性绑定 或者,您可以传递第二个参数来定义 要搜索数据绑定属性的文档。例如 ko.applyBindings(myViewModel, document.getElementById('someElementId'))。这限制了 激活ID为someElementId的元素及其子元素, 如果希望有多个视图模型并关联,则此选项非常有用 每个页面都有一个不同的区域 有用功能:
// Checks if Element has Already been Bound (Stops Errors Occuring if already bound as element can't be bound multiple times)
var isBound = function (id) {
if (document.getElementById(id) != null)
return !!ko.dataFor(document.getElementById(id));
else
return false;
};
答复:
testSubject = new Mobile.Navigation.ThreeStepNavigation.View();
if (isBound("parent-container"))
ko.cleanNode(document.getElementById('parent-container'));
ko.applyBindings(testSubject, document.getElementById("parent-container"));
看起来KO不止一次被捆绑。我只能猜测这是在loadfixtures步骤或视图实例化期间发生的。尝试注释掉
ko.applyBindings(testSubject)代码>…加上您的测试有点奇怪,因为它似乎在运行测试时根据屏幕大小有不同的断言,这可能不是一个好主意(除非我遗漏了什么)。尝试了removeNode
,它类似于cleanNode
(从DOM中删除节点)
testSubject = new Mobile.Navigation.ThreeStepNavigation.View();
if (isBound("parent-container"))
ko.cleanNode(document.getElementById('parent-container'));
ko.applyBindings(testSubject, document.getElementById("parent-container"));