摩卡的全局泄漏错误

Mon*_*key 37 unit-testing mocha.js push-notification apple-push-notifications node.js

当我试图打开APN连接时出现全局泄漏错误时,我试图对Apple推送通知库进行单元测试.

这是我的配置错误还是node-apn或mocha中的错误?

我不确定我理解checkGlobals正在做什么......它只是检查是否正在设置任何全局变量?

0) Feed "before all" hook:
   Error: global leak detected: hasCert
     at Runner.checkGlobals (/usr/lib/node_modules/mocha/lib/runner.js:96:21)
     at Runner.<anonymous> (/usr/lib/node_modules/mocha/lib/runner.js:41:44)
     at Runner.emit (events.js:64:17)
     at /usr/lib/node_modules/mocha/lib/runner.js:159:12
     at Hook.run (/usr/lib/node_modules/mocha/lib/runnable.js:114:5)
     at next (/usr/lib/node_modules/mocha/lib/runner.js:157:10)
     at Array.<anonymous> (/usr/lib/node_modules/mocha/lib/runner.js:165:5)
     at EventEmitter._tickCallback (node.js:126:26)
Run Code Online (Sandbox Code Playgroud)

ent*_*nto 50

是的,Mocha具有全局泄漏检测机制,如果您的测试代码引入全局变量,它会发出警报并失败.

如果hasCert在库中声明并且您无法控制其创建,则可以告诉Mocha忽略它.

命令行上,

$ mocha --globals hasCert
Run Code Online (Sandbox Code Playgroud)

引用文档:

[此选项]接受以逗号分隔的已接受全局变量名称列表.例如,假设您的应用程序故意公开全局命名应用程序和YUI,您可能需要添加--globals app,YUI.

在浏览器中:

mocha.setup({globals: ['hasCert']});
Run Code Online (Sandbox Code Playgroud)

  • 不知道为什么,但是`mocha.setup({globals:['hasCert']});`对我没有好处.Jimchao的`mocha.setup({ignoreLeaks:true});`建议确实对我有用. (3认同)

Jim*_*hao 24

您还可以通过传递来禁用全局泄漏检测:

mocha --ignore-leaks
Run Code Online (Sandbox Code Playgroud)

在浏览器中:

mocha.setup({ignoreLeaks: true});
Run Code Online (Sandbox Code Playgroud)


Dom*_*nes 12

我也遇到了这个问题,你可能忘记了var我所做的某个声明,这在JS中意味着将创建一个全局变量.

您可能需要根据自己的应用程序结构自行搜索它,并且希望它不是导致此问题的第三方代码.:P

您应该使用的JSLintJSHint通过你的项目,他们应该帮助揭开源,如果它在你的代码的任何地方.


Gud*_*son 7

如果您忘记new调用构造函数,也会发生这种情况.在这种情况下,this是全局对象,因此构造函数中引入的任何属性都将添加到全局对象中.

这个问题不应该长期被发现,但这是一个有趣的测试失败.