茉莉花节点 - 在称为其他功能的构造函数上创建间谍



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

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

我想为sampleFunction编写单元测试。为此,我需要在Loader构造函数上创建间谍,并检查该构造函数作为params和哪种对象返回。

有什么想法如何做?我试图在Loader.prototype.constructor上创建间谍,但这不是解决此问题的解决方案。

好,所以通常在客户端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调用仅在您希望构造函数做某事时(通常是使用构造函数)。

这有点骇客,但它有效,似乎是通过节点内的茉莉花实现实现此目的的唯一方法。

相关内容

最新更新