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)
Jim*_*hao 24
您还可以通过传递来禁用全局泄漏检测:
mocha --ignore-leaks
Run Code Online (Sandbox Code Playgroud)
在浏览器中:
mocha.setup({ignoreLeaks: true});
Run Code Online (Sandbox Code Playgroud)
如果您忘记new调用构造函数,也会发生这种情况.在这种情况下,this是全局对象,因此构造函数中引入的任何属性都将添加到全局对象中.
这个问题不应该长期被发现,但这是一个有趣的测试失败.