使用Initial Instantiated类进行Jasmine测试

时间:2013-01-15 16:04:45

标签: javascript jasmine revealing-module-pattern

我在JavaScript中使用了揭示模式和初始类即时。我也在使用Jasmine来测试这个类,但需要一种方法来重置myNamespace.myViewModel的状态(这是一个简单的例子,但想象一个带有多个变量的复杂视图模型),然后再运行每个测试。

这是一个示例类:

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();
    });
});

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:2)

你做不到。导致模式所做的一切,就是创建一个在闭包中绑定了一些变量的新对象。所以即使你在你的应用程序中使用它,你也无法转发这个对象的状态,因为你无法创建它的新版本。此词class也没有正确描述此模式,因为您无法从中创建新实例。因此,在这种情况下,您应该问问自己这是否适合您。

答案 1 :(得分:0)

有一个afterEach()功能。与beforeEach()的工作方式相同,但运行测试后:

afterEach(function(){
    //reset the state here!
});