2011-11-10 61 views
4

我刚刚开始使用Knockout JS和QUnit来做单元测试我的挖空视图模型。我遇到的问题是,如果我在qunit测试JavaScript文件中有多个测试,并且链接到包含我的View Model定义的JavaScript文件...我在一个测试中对View Model进行的任何更改当我在测试模块中开始下一个测试时也存在。我习惯于有一个NUnit环境,我的状态在测试之间自动清除。在QUnit测试中重置KnockoutJS ViewModel

是否有某种方法,模式或示例,某人可以指出哪个方法显示了定义视图模型的最佳方法,并使其重置为每个单元测试开始的状态?

回答

2

您是否使用module的第二个参数(生命周期)?如果没有,你应该能够在这个级别实例化视图模式,是这样的:

module("foo", { 
    setup: function() { 
     this.model = instantiateModel(); 
    }, 
    tearDown: function() { 
     // execute reset here 
    }); 

test("bar", function() { 
    ok(this.model.hasSomething() !== null, "msg"); 
}); 

从我记得读,QUnit毒鼠强是在相同的范围内setuptearDown运行,所以在定义的任何成员setup将在任何后续测试中访问。

+0

OK ......这肯定看起来像什么,我一直在寻找。你之前用过Knockout吗?我是否需要在该instaniateModel类中调用ko.applyBindings(viewModel)?这会产生第二次电话会导致事情发生吗? – Nick

+0

我用过淘汰赛,但没有单元测试过。 'instantateModel()'是你必须实现的东西(你的任何自定义设置步骤) - 对不起,应该澄清一点。 –

+4

是的,你必须在'setup'中调用'ko.applyBindings'。在'tearDown'中,你还必须使用'ko.cleanNode'来移除对DOM节点的绑定。 –