我有一些使用fixture(加载了jasmine-jquery)运行的功能测试,它在HTML中有一些Knockout绑定。在每次测试开始时,我想从处于初始状态的viewModel开始。
如果我使用viewModel的新实例调用beforeEach()中的applyBindings(),我会从Knockout中获取此错误
错误:您无法多次将绑定应用于同一元素。
如果我尝试恢复现有viewModel的属性以匹配其初始状态,我仍然会收到错误。我相信这是因为每次测试后都会删除fixture的HTML - 这可能会破坏绑定?
我还尝试了came up when Googling在Knockout中使用cleanNode函数的建议。这不是API的一部分(它只是设计为内部使用的Knockout),无论我尝试了什么,它都没有解决问题。
感觉我采取了错误的做法。的 TL;博士;其他人如何使用Jasmine测试Knockout?
感谢您的帮助
答案 0 :(得分:2)
我通常会在beforeEach
中附加一个元素,对该元素应用绑定,并在ko.removeNode
中对其afterEach
进行应用。类似的东西:
var fixture;
beforeEach(function() {
fixture = document.createElement("div");
document.body.appendChild(fixture);
});
afterEach(function() {
ko.removeNode(fixture);
});
然后使用fixture
作为任何applyBindings调用的第二个参数,例如:ko.applyBindings(myTestViewModel, fixture);
答案 1 :(得分:0)
我解决这个问题的方法是改变我的js以检查茉莉花,例如:
if (!window.jasmine)
ko.applyBindings(viewModel);