Подтвердить что ты не робот

Глобальные ошибки утечки в мокко

Я пытался unit test apple push notification library, когда получил глобальную ошибку утечки, пытающуюся открыть соединение APN.

Это ошибка конфигурации с моей стороны или ошибка в 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)
4b9b3361

Ответ 1

Да, Mocha имеет глобальный механизм обнаружения утечек, который предупреждает и терпит неудачу, если ваш тестируемый код содержит глобальные переменные.

Если hasCert объявлено в библиотеке и вы не контролируете его создание, вы можете сказать, что Mocha игнорирует его.

В командной строке ,

$ mocha --globals hasCert

Чтобы процитировать документацию:

[Эта опция] принимает список принятых глобальных имен переменных с разделителями-запятыми. Например, предположим, что ваше приложение намеренно раскрывает глобальное именованное приложение и YUI, вы можете добавить приложение -globals, YUI.

В браузере:

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

Ответ 2

Вы также можете отключить глобальное обнаружение утечки, передав:

mocha --ignore-leaks

В браузере:

mocha.setup({ignoreLeaks: true});

Ответ 3

Я столкнулся с этой проблемой, вы, вероятно, забыли оператор var где-то, как я, который в JS означает, что будет создана глобальная переменная.

Возможно, вам придется искать это самостоятельно, в зависимости от того, как вы структурировали свое приложение, и, надеюсь, это не сторонний бит кода, который вызывает это.: P

Вы должны использовать JSLint или JSHint через ваш проект, они должны помочь раскрыть источник, если он где-нибудь в вашем коде.

Ответ 4

Это также может произойти, если вы забудете new при вызове конструктора. В этом случае this является глобальным объектом, поэтому любые свойства, введенные в конструкторе, будут добавлены к глобальному объекту.

Эта проблема не должна оставаться незамеченной надолго, но это интересный тест.

Ответ 5

Я наткнулся на этот ответ, когда пытаюсь выяснить, как шуметь утечки JSONP, например:

Error: global leak detected: jQuery20305777117821853608_1388095882488

Шумоподавление jQuery JSONP "утечки" через:

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

Ответ 6

Я столкнулся с этой ошибкой для многих функций следующим образом:

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

Итак, я передал шаблон в настройке, и он решил мою проблему.

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