使用jasmine-node监视全局函数

时间:2012-09-03 16:16:11

标签: javascript node.js jasmine

我正在使用jasmine-node对javascript代码进行单元测试。我有许多全局函数,我想窥探并允许调用它来实现原始实现。请参阅下面的代码作为示例。

由于我无法解释的原因,我看到错误“globalFunction()方法不存在”。

有人能告诉我为什么茉莉花无法找到这个我理解为全球范围的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.    

1 个答案:

答案 0 :(得分:3)

你的globalFunction实际上不是全球性的。删除var关键字以使其成为全局关键字。

globalFunction = function() {
    console.log('globalFunction');
};
  

在浏览器中,顶级范围是全局范围。这意味着在浏览器中,如果您在全局范围内,var会定义一个全局变量。在Node中,这是不同的。顶级范围不是全球范围; Node模块中的var内容将是该模块的本地内容。