我在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();
});
});
有办法做到这一点吗?
答案 0 :(得分:2)
你做不到。导致模式所做的一切,就是创建一个在闭包中绑定了一些变量的新对象。所以即使你在你的应用程序中使用它,你也无法转发这个对象的状态,因为你无法创建它的新版本。此词class
也没有正确描述此模式,因为您无法从中创建新实例。因此,在这种情况下,您应该问问自己这是否适合您。
答案 1 :(得分:0)
有一个afterEach()
功能。与beforeEach()
的工作方式相同,但运行测试后:
afterEach(function(){
//reset the state here!
});