【问题标题】:Resetting a KnockoutJS ViewModel in QUnit Tests在 QUnit 测试中重置 KnockoutJS ViewModel
【发布时间】:2011-11-10 19:34:30
【问题描述】:

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

是否有人可以指出一种方法、模式或示例来显示定义视图模型的最佳方式,并让它在每个单元测试开始时重置其状态?

【问题讨论】:

    标签: javascript unit-testing knockout.js qunit


    【解决方案1】:

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

    module("foo", {
        setup: function() {
            this.model = instantiateModel();
        },
        tearDown: function() {
            // execute reset here
        });
    
    test("bar", function() {
        ok(this.model.hasSomething() !== null, "msg");
    });
    

    据我记得读过,QUnit tets 与setuptearDown 在同一范围内运行,因此setup 中定义的任何成员都可以在任何后续测试中访问。

    【讨论】:

    • 好的...这绝对是我想要的。你以前用过 Knockout 吗?我需要在那个 instaniateModel 类中调用 ko.applyBindings(viewModel) 吗?这会产生第二个电话,这会搞砸事情吗?
    • 我使用了淘汰赛,但没有对其进行单元测试。 instantateModel() 是您必须实施的东西(您的任何自定义设置步骤) - 抱歉,应该澄清一下。
    • 是的,您必须在setup 中致电ko.applyBindings。在 tearDown 中,您还必须使用 ko.cleanNode 来删除与 DOM 节点的任何绑定。
    • 如果你想同时测试 View 和 ViewModel,但是,如果你只是测试 ViewModel 的逻辑,你不需要绑定它,只需创建 viewModel 然后测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多