4

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

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

我想为sampleFunction. 为此,我需要在Loader构造函数上创建 spy 并检查此构造函数作为参数获取的内容以及它返回的对象类型。

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

4

1 回答 1

5

好的,所以通常在客户端 JavaScript 中你会像这样使用 window 对象jasmine.spyOn(window, 'Loader')

然而,在 node 中,没有 window 对象,尽管声称相反 global 不是替代品(除非您在运行在全局范围内的 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 在 node.js 中的实现来实现这一点的唯一方法。

于 2015-03-06T17:10:57.883 回答