Grz*_*nik 4 javascript spy node.js jasmine-node
我是 jasmine 的新手,我需要在这个框架中为 node.js 应用程序编写一些单元测试。我有一些问题,其中之一如下所述:
var sampleFunction = function(){
var loader = new Loader(params);
// rest of logic here
}
Run Code Online (Sandbox Code Playgroud)
我想为sampleFunction. 为此,我需要在Loader构造函数上创建 spy并检查此构造函数作为参数获取的内容以及它返回的对象类型。
任何想法如何做到这一点?我尝试创建 spy on ,Loader.prototype.constructor但这不是解决此问题的方法。
好的,所以通常在客户端 JavaScript 中你会像这样使用 window 对象 jasmine.spyOn(window, 'Loader')
然而,在 node 中,没有 window 对象,尽管声称相反, global 不是替代品(除非您在全局范围内运行的 REPL 中)。
function MyConstructor () {}
console.log(global.MyConstructor); --> undefined
console.log(this.MyConstructor); --> undefined
Run Code Online (Sandbox Code Playgroud)
因此,在节点中,您需要将构造函数附加到一个对象上。所以就做这样的事情
var Helpers = {
Loader: Loader
};
var constSpy = jasmine.spyOn(Helpers, 'Loader').andCallThrough();
sampleFunction();
expect(constSpy).toHaveBeenCalled();
Run Code Online (Sandbox Code Playgroud)
的andCallThrough,如果你想你的构造函数做一些事情(与构造往往你做的)调用才是必需的。
这有点 hacky,但它有效并且似乎是通过 jasmine 在 node.js 中的实现来实现这一点的唯一方法。