我应该如何使用Jasmine在JavaScript中对一个单例进行单元测试?
我有一些代码如下所示: 如果我是对的,那么这是一个单例类。现在我想用Jasmine为这个类编写一些单元测试。我是这样开始的: 我已经了解到,由于在最外层的我应该如何使用Jasmine在JavaScript中对一个单例进行单元测试?,javascript,unit-testing,debugging,singleton,jasmine,Javascript,Unit Testing,Debugging,Singleton,Jasmine,我有一些代码如下所示: 如果我是对的,那么这是一个单例类。现在我想用Jasmine为这个类编写一些单元测试。我是这样开始的: 我已经了解到,由于在最外层的函数(){}周围有括号,所以这个单例被实例化。在代码的其余部分,没有调用这个单例的init方法,这加强了我的假设(在这种情况下,init方法的意义是什么?) 由此得出结论,我知道 var myX; beforeEach(function(){ myX = x; }); 不可能是对的。我尝试了许多其他的排列方式来处理一些事情(从
函数(){}
周围有括号,所以这个单例被实例化。在代码的其余部分,没有调用这个单例的init
方法,这加强了我的假设(在这种情况下,init
方法的意义是什么?)
由此得出结论,我知道
var myX;
beforeEach(function(){
myX = x;
});
不可能是对的。我尝试了许多其他的排列方式来处理一些事情(从完全忽略开始,因为我发现包含代码的文件已经在浏览器达到测试规范时被解析了,所以singleton类应该是可用的,对吧?)。但所有操作都会产生完全相同的错误消息:
ReferenceError: x is not defined
那么我该如何解决这个问题呢
提前谢谢
-克里斯
如果没有定义x,那么您似乎没有包含模块代码。请告诉我们您是如何将其嵌入测试的
使用两个类型断言(一个在实例化之前,一个在实例化之后)来测试单例:
function foo()
{
foo = {};
return 1;
}
console.assert(foo.constructor === Object, "foo.constructor === Function", 'foo should be a type of Function before it is instantiated')
foo();
console.assert(foo.constructor === Object, "foo.constructor === Object", 'foo should be a type of Object after it is instantiated')
参考资料
x没有定义
,你似乎没有包含模块代码。请告诉我们你是如何将其嵌入到测试中的。顺便说一句,为什么你不干脆expect(x.init).toBeDefined()
?正如我所说的,我已经尝试了很多方法,也没有“实例化”类。在这个例子中,我使用了expect(x.init).toBeDefined()
当然。相同的错误消息。我使用一个通用的
标记将源文件和规范文件包含在SpecRunner.html
(首先是源文件,然后是规范)中。是的,可能您没有正确加载模块,因为x
将被定义为其他类型。向我们展示应该加载它们的代码!
ReferenceError: x is not defined
function foo()
{
foo = {};
return 1;
}
console.assert(foo.constructor === Object, "foo.constructor === Function", 'foo should be a type of Function before it is instantiated')
foo();
console.assert(foo.constructor === Object, "foo.constructor === Object", 'foo should be a type of Object after it is instantiated')