0

我在 javascript 文件中声明了一个 ViewModel,如下所示。

(function(root) {
    var ko = root.ko;

    var vm = {
        modelType: ko.observable(),
        message : ko.observable(),
        toolbarIsVisible : ko.observable(true),
        isDataDirectoryManager : ko.observable(true),
        listItems : ko.observableArray(),

     ko.applyBindings(vm);

    };
}(window));

在我的单元测试 js 文件中,我引用了 qunit.js 和带有 vm 的 js 文件。如何构建一个测试来检查(比如说)toolbarIsVisible 的值。我似乎无法编写正确的语法来在我的测试中引用 vm 变量。

谢谢马丁

4

1 回答 1

0

它是一个闭包,因此从测试中获取它的唯一方法是模拟 ko.applyBindings 并从那里检索 vm 值。

但我真的认为你应该像这样公开你的虚拟机

(function(ko, MyApp) {
    MyApp.ViewModel = {
        modelType: ko.observable(),
        message : ko.observable(),
        toolbarIsVisible : ko.observable(true),
        isDataDirectoryManager : ko.observable(true),
        listItems : ko.observableArray()
    };
    ko.applyBindings(ViewModel);

}(window.ko, window.MyApp = window.MyApp || {}));

编辑:另一个提示是不要使用对象文字,而是使用原型对象,例如

MyApp.ViewModel = function() {
    this.modelType = ko.observable();
};

MyApp.ViewModel.prototype = {
    foo: function() {
    }        
};

编辑:Qunit 示例

test("When model is valid", function() {
   var model = MyApp.ViewModel();
   model.value("Valid value");
   equal(model.canSave(), true, "You should be able to save");
});
于 2013-06-14T08:50:42.570 回答