【问题标题】:spying upon a global function using jasmine-node使用 jasmine-node 监视全局函数
【发布时间】:2012-09-04 01:37:31
【问题描述】:

我正在使用 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.    

【问题讨论】:

    标签: javascript node.js jasmine


    【解决方案1】:

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

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

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

    【讨论】:

    • 您好,谢谢,这解释了为什么不能引用该函数。如何引用模块本地的范围?
    • 据我所知,没有特别提到本地模块范围。
    猜你喜欢
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    相关资源
    最近更新 更多