使用茉莉节点来监视全局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内容将是该模块的本地内容。