摩卡全球泄漏错误
我试图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: ['*'] });