我正在使用 jasmine-node 对 javascript 代码进行单元测试。我有许多全局函数,我想监视它们并允许调用使其达到原始实现。请参阅下面的代码作为示例。
由于我无法解释的原因,我看到错误“globalFunction() 方法不存在”。
有人可以告诉我为什么 jasmine 无法找到这个 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 的输出
$ 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.
Your globalFunction
事实上不是全球性的。消除var
关键字使其成为全球性的。
globalFunction = function() {
console.log('globalFunction');
};
在浏览器中,顶级作用域是全局作用域。这意味着在浏览器中,如果您位于全局范围 var 中,某些内容将定义全局变量。在 Node 中这是不同的。顶级作用域不是全局作用域; var Node 模块内的某些内容将是该模块的本地内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)