我应该如何使用Jasmine在JavaScript中对一个单例进行单元测试?

我应该如何使用Jasmine在JavaScript中对一个单例进行单元测试?,javascript,unit-testing,debugging,singleton,jasmine,Javascript,Unit Testing,Debugging,Singleton,Jasmine,我有一些代码如下所示: 如果我是对的,那么这是一个单例类。现在我想用Jasmine为这个类编写一些单元测试。我是这样开始的: 我已经了解到,由于在最外层的函数(){}周围有括号,所以这个单例被实例化。在代码的其余部分,没有调用这个单例的init方法,这加强了我的假设(在这种情况下,init方法的意义是什么?) 由此得出结论,我知道 var myX; beforeEach(function(){ myX = x; }); 不可能是对的。我尝试了许多其他的排列方式来处理一些事情(从

我有一些代码如下所示:

如果我是对的,那么这是一个单例类。现在我想用Jasmine为这个类编写一些单元测试。我是这样开始的:

我已经了解到,由于在最外层的
函数(){}
周围有括号,所以这个单例被实例化。在代码的其余部分,没有调用这个单例的
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')
参考资料


“在这种情况下,init方法的意义是什么?”-您应该知道,它是您的模块。我们没有写代码,我也没有。我只是想写测试。但是谢谢(;如果你得到的
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')