摩卡全球泄漏错误

我试图unit testing苹果推送通知库时,我有一个全球性的泄漏错误,试图打开一个APN连接。

那是我的configuration错误还是node-apn或mocha中的错误?

我不知道我明白了checkGlobals在做什么…它只是检查是否有全局variables被设置?

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) 

是的,摩卡具有全局泄漏检测机制,如果您的代码引入全局variables,则会发出警报并失败。

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

在命令行上 ,

 $ mocha --globals hasCert 

引用文档:

[此选项]接受逗号分隔的可接受的全局variables名称列表。 例如,假设您的应用程序故意公开全局命名应用程序和YUI,则可能需要添加–globals应用程序YUI。

在浏览器中:

 mocha.setup({globals: ['hasCert']}); 

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

 mocha --ignore-leaks 

在浏览器中:

 mocha.setup({ignoreLeaks: true}); 

我遇到了这个问题,你可能忘记了一个var语句,就像我做的那样,在JS中意味着将会创build一个全局variables。

您可能需要根据自己的应用程序结构来自行search,希望这不是造成这种情况的第三方代码。 :P

你应该通过你的项目使用JSLint或者JSHint ,如果你的代码里有任何东西,它们应该帮助你find源代码。

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

这个问题不应该被长时间检测出来,但这是一个有趣的testing失败。

我遇到这个答案,当我试图找出如何压制JSONP泄漏,如:

 Error: global leak detected: jQuery20305777117821853608_1388095882488 

静音jQuery的JSONP“泄漏”通过:

 mocha.setup({ globals: ['jQuery*'] }); 

我遇到这个错误的许多function如下:

 1) test "before all" hook: Error: global leaks detected: __timers, _document, history, addEventListener, removeEventListener, dispatchEvent, raise, __stopAllTimers, Image, _virtualConsole, run, getGlobal, dispose, top, parent, self, frames, window, _frame, $, jQuery, Handlebars, Ember, Em, MetamorphENV, Cloud, jQuery1102048038746835663915, _listeners, _length, length, document, location, close, getComputedStyle, navigator, name, innerWidth, innerHeight, outerWidth, outerHeight, pageXOffset, pageYOffset, screenX, screenY, screenLeft, screenTop, scrollX, scrollY, scrollTop, scrollLeft, alert, blur, confirm, createPopup, focus, moveBy, moveTo, open, print, prompt, resizeBy, resizeTo, scroll, scrollBy, scrollTo, screen, mapper, mapDOMNodes, visitTree, markTreeReadonly, INDEX_SIZE_ERR, DOMSTRING_SIZE_ERR, HIERARCHY_REQUEST_ERR, WRONG_DOCUMENT_ERR, INVALID_CHARACTER_ERR, NO_DATA_ALLOWED_ERR, NO_MODIFICATION_ALLOWED_ERR, NOT_FOUND_ERR, NOT_SUPPORTED_ERR, INUSE_ATTRIBUTE_ERR, INVALID_STATE_ERR, SYNTAX_ERR, INVALID_MODIFICATION_ERR, NAMESPACE_ERR, INVALID_ACCESS_ERR, exceptionMessages, DOMException, NodeList, DOMImplementation, Node, NamedNodeMap, AttributeList, Element, DocumentFragment, Document, Attr, EventException, Event, UIEvent, MouseEvent, MutationEvent, EventTarget, languageProcessors, resourceLoader, HTMLCollection, HTMLOptionsCollection, HTMLDocument, HTMLElement, HTMLFormElement, HTMLLinkElement, HTMLMetaElement, HTMLHtmlElement, HTMLHeadElement, HTMLTitleElement, HTMLBaseElement, HTMLIsIndexElement, HTMLStyleElement, HTMLBodyElement, HTMLSelectElement, HTMLOptGroupElement, HTMLOptionElement, HTMLInputElement, HTMLTextAreaElement, HTMLButtonElement, HTMLLabelElement, HTMLFieldSetElement, HTMLLegendElement, HTMLUListElement, HTMLOListElement, HTMLDListElement, HTMLDirectoryElement, HTMLMenuElement, HTMLLIElement, HTMLCanvasElement, HTMLDivElement, HTMLParagraphElement, HTMLHeadingElement, HTMLQuoteElement, HTMLPreElement, HTMLBRElement, HTMLBaseFontElement, HTMLFontElement, HTMLHRElement, HTMLModElement, HTMLAnchorElement, HTMLImageElement, HTMLObjectElement, HTMLParamElement, HTMLAppletElement, HTMLMapElement, HTMLAreaElement, HTMLScriptElement, HTMLTableElement, HTMLTableCaptionElement, HTMLTableColElement, HTMLTableSectionElement, HTMLTableRowElement, HTMLTableCellElement, HTMLFrameSetElement, HTMLFrameElement, HTMLIFrameElement, StyleSheet, MediaList, CSSStyleSheet, CSSRule, CSSStyleRule, CSSMediaRule, CSSImportRule, CSSStyleDeclaration, StyleSheetList, VALIDATION_ERR, TYPE_MISMATCH_ERR, UserDataHandler, DOMError, DOMConfiguration, DOMStringList, XPathException, XPathExpression, XPathResult, XPathEvaluator, DocumentType, CharacterData, ProcessingInstruction, Comment, Text, NodeFilter, _parser, _parsingMode, _augmented 

所以我在设置function中通过了一个通配符,它​​解决了我的问题。

 mocha.setup({ globals: ['*'] });