如何为每个Jasmine测试重置Knockout?

时间:2014-12-02 13:57:02

标签: javascript jquery mvvm knockout.js jasmine

我有一些使用fixture(加载了jasmine-jquery)运行的功能测试,它在HTML中有一些Knockout绑定。在每次测试开始时,我想从处于初始状态的viewModel开始。

如果我使用viewModel的新实例调用beforeEach()中的applyBindings(),我会从Knockout中获取此错误

  

错误:您无法多次将绑定应用于同一元素。

如果我尝试恢复现有viewModel的属性以匹配其初始状态,我仍然会收到错误。我相信这是因为每次测试后都会删除fixture的HTML - 这可能会破坏绑定?

我还尝试了came up when Googling在Knockout中使用cleanNode函数的建议。这不是API的一部分(它只是设计为内部使用的Knockout),无论我尝试了什么,它都没有解决问题。

感觉我采取了错误的做法。的 TL;博士;其他人如何使用Jasmine测试Knockout?

感谢您的帮助

2 个答案:

答案 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);