使用茉莉节点来监视全局function
我正在使用jasmine-node对javascript代码进行unit testing。 我有一些全球性的function,我想间谍,并允许通话,但尽pipe如此,原来的实施。 以下面的代码为例。
由于我无法解释的原因,我看到一个错误“globalFunction()方法不存在”。
有人可以告诉我,为什么茉莉花不能find这种globalFunction方法,我明白在全球范围内。
我感谢帮助
var globalFunction = function() { console.log('globalFunction'); }; describe("A Global Function", function() { jasmine.getEnv().addReporter(new jasmine.ConsoleReporter(console.log)); it("may be spied upon", function() { spyOn(global,'globalFunction').andCallThrough(); globalFunction(); expect(globalFunction).toHaveBeenCalled(); }); });
这是茉莉花节点的输出
$ jasmine-node --verbose test.spec.js Runner Started. A Global Function : may be spied upon ... Failed. A Global Function: 0 of 1 passed. A Global Function may be spied upon Failures: 1) may be spied upon Message: globalFunction() method does not exist Stacktrace: undefined Finished in 0.008 seconds 1 test, 1 assertion, 1 failure Runner Finished. 1 spec, 1 failure in 0.008s.
其实globalFunction
不是全球的。 删除var
关键字使其成为全局的。
globalFunction = function() { console.log('globalFunction'); };
在浏览器中,顶级范围是全局范围。 这意味着在浏览器中,如果你在全局范围内,var将会定义一个全局variables。 在Node中,这是不同的。 顶级范围不是全球范围; 在Node模块内的var内容将是该模块的本地内容。