Javascript Jasmine节点-在其他函数内调用的构造函数上创建间谍

Javascript Jasmine节点-在其他函数内调用的构造函数上创建间谍,javascript,node.js,jasmine-node,spy,Javascript,Node.js,Jasmine Node,Spy,我是jasmine的新手,需要在这个框架中为node.js应用程序编写一些单元测试。 我有一些问题,其中之一如下所述: var sampleFunction = function(){ var loader = new Loader(params); // rest of logic here } 我想为sampleFunction编写单元测试。要做到这一点,我需要在Loader构造函数上创建spy,并检查该构造函数作为参数得到了什么,以及它返回了什么类型的对象 有什么办法吗?

我是jasmine的新手,需要在这个框架中为node.js应用程序编写一些单元测试。 我有一些问题,其中之一如下所述:

var sampleFunction = function(){
    var loader = new Loader(params);
    // rest of logic here
}
我想为
sampleFunction
编写单元测试。要做到这一点,我需要在
Loader
构造函数上创建spy,并检查该构造函数作为参数得到了什么,以及它返回了什么类型的对象


有什么办法吗?我试图在
Loader.prototype.constructor
上创建spy,但这并不是这个问题的解决方案。

好的,所以通常在客户端JavaScript中,您会使用窗口对象,比如so
jasmine.spyOn(窗口,“Loader”)

然而,在node中,并没有窗口对象,尽管有相反的声明,但global不是替代对象(除非您位于在全局范围内运行的REPL中)

所以,在节点中,您需要将构造函数附加到对象。所以就这样做吧

var Helpers = {
   Loader: Loader
};

var constSpy = jasmine.spyOn(Helpers, 'Loader').andCallThrough();

sampleFunction();

expect(constSpy).toHaveBeenCalled();
和callthrough
调用仅在您希望构造函数执行某些操作(通常使用构造函数执行)时才是必需的


这是一个有点粗糙的方法,但它可以工作,而且似乎是通过jasmine在节点内的实现来实现这一点的唯一方法。

您可以粘贴整个
sampleFunction
函数体吗?如何创建spy取决于您在哪里定义
加载器
构造函数。请描述定义它的位置。jasmine的更新版本:
。和.callThrough()
而不是
和callthrough()
var Helpers = {
   Loader: Loader
};

var constSpy = jasmine.spyOn(Helpers, 'Loader').andCallThrough();

sampleFunction();

expect(constSpy).toHaveBeenCalled();