Jasmine-node - 在其他函数内部调用的构造函数上创建一个间谍

时间:2014-03-11 09:37:13

标签: javascript node.js jasmine-node spy

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

var sampleFunction = function(){
    var loader = new Loader(params);
    // rest of logic here
}

我想为sampleFunction编写单元测试。为此,我需要在Loader构造函数上创建间谍,并检查此构造函数作为参数获取的内容以及它返回的对象类型。

任何想法如何做到这一点?我试图在Loader.prototype.constructor创建间谍,但这不是解决这个问题的方法。

1 个答案:

答案 0 :(得分:4)

好的,通常在客户端JavaScript中你可以使用像jasmine.spyOn(window, 'Loader')

这样的窗口对象

然而,在节点中,没有窗口对象,尽管声称相反的全局不是替代(除非您在全局范围内运行的REPL中)。

function MyConstructor () {}
console.log(global.MyConstructor); --> undefined
console.log(this.MyConstructor); --> undefined

因此,在节点中,您需要将构造函数附加到对象。所以只做这样的事情

var Helpers = {
   Loader: Loader
};

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

sampleFunction();

expect(constSpy).toHaveBeenCalled();

andCallThrough调用仅在您希望构造函数执行某些操作时才需要(通常使用构造函数)。

这有点像hacky,但它起作用,似乎是通过jasmine在节点内实现来实现这一目标的唯一方法。