javascript - 使用初始实例化类的 Jasmine 测试

标签 javascript jasmine revealing-module-pattern

我在我的 JavaScript 中使用揭示模式和初始类实例化。我也在使用 Jasmine 来测试这个类,但需要一种方法来在每次测试运行之前重置 myNamespace.myViewModel 的状态(这是一个简单的示例,但想象一个具有多个变量的复杂 View 模型)。

这是一个示例类:

myNamespace.myViewModel = (function(ko, $, window){
   var init = function(){},
       name = 'bob',
       nameSetter = function(value){ name = value; };
   return {
     Init: init,
     Name: name,
     NameSetter: nameSetter
   };
}(ko, $, window));

在 Jasmine 中,我从:

describe("VM Specs", function () {
    'use strict';
    var vm;
    beforeEach(function(){
       // the vm isn't re-created since it is a "static" class in memory
       vm = myNameSpace.myViewModel;
    });
    it("should set name", function(){
       vm.NameSetter('joe');
       expect(vm.Name === 'joe').toBeTruthy();
    });
    it("should have the default state, even after the other test ran", function(){
       expect(vm.Name === 'bob').toBeTruthy();
    });
});

有办法吗?

最佳答案

你不能。因为该模式所做的就是创建一个新对象,该对象在闭包中绑定(bind)了一些变量。因此,即使您在您的应用程序中使用它,您也无法中继该对象的状态,因为您无法创建它的新版本。此外,class 一词并未正确描述此模式,因为您无法从中创建新实例。因此,您应该问问自己,在这种情况下,这是否适合您。

关于javascript - 使用初始实例化类的 Jasmine 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14341761/

相关文章:

angularjs - 编写 Jasmine 测试(BDD)时 "it"内有多个 "describe"

javascript - TypeError : moment(). tz 不是函数

javascript - 如何使用 Protractor/Selenium 设置可用于我的测试套件的常用函数?

javascript - 揭示模块模式java脚本无法访问变量

Javascript 属性自动引用

javascript - 通过用户提示求一个数的阶乘

javascript - jQuery 和 IE 中的内存泄漏

javascript - 阻止 YouTube javascript API 中的后续自动播放

javascript - 揭示模块模式,未定义的属性

Javascript 揭示模块模式 Noob