我是茉莉花的新手,我需要在这个框架中为node.js应用程序编写一些单元测试。 我有一些问题,其中一个问题如下所述:
var sampleFunction = function(){
var loader = new Loader(params);
// rest of logic here
}
我想为sampleFunction
编写单元测试。为此,我需要在Loader
构造函数上创建间谍,并检查此构造函数作为参数获取的内容以及它返回的对象类型。
任何想法如何做到这一点?我试图在Loader.prototype.constructor
创建间谍,但这不是解决这个问题的方法。
答案 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在节点内实现来实现这一目标的唯一方法。