Jasmine-node – 在一个名为inside other function的构造函数中创build一个间谍

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

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

我想为sampleFunction编写unit testing。 要做到这一点,我需要在Loader构造函数上创build间谍,并检查这个构造函数是作为参数获取的,它返回的对象是什么types。

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

好的,通常在客户端JavaScript中,您可以使用窗口对象,例如jasmine.spyOn(window, 'Loader')

然而,在节点中,没有窗口对象,尽pipe相反,全局不是替代(除非你在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调用只有当你想让你的构造函数做某事时(通常是用你的构造函数)才是必须的。

这是一个小黑客,但它的工作,似乎是通过茉莉花节点内实现这一目标的唯一途径。