1

我在我的 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));

在茉莉花中,我从以下内容开始:

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

有没有办法做到这一点?

4

2 回答 2

2

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

于 2013-01-17T09:43:58.307 回答
0

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

afterEach(function(){
    //reset the state here!
});
于 2013-01-15T16:08:52.497 回答