web-dev-qa-db-fra.com

erreurs de fuite globales en moka

J'essayais de tester un peu la bibliothèque de notifications Apple Push quand une erreur de fuite globale s'est produite lors de la tentative d'ouverture d'une connexion APN. 

Est-ce une erreur de configuration de ma part ou une erreur de node-apn ou mocha?

Je ne suis pas sûr de comprendre ce que fait CheckGlobals ... vérifie-t-il simplement si une variable globale est définie?

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)
36
MonkeyBonkey

Oui, Mocha comporte un mécanisme de détection de fuite global qui alerte et échoue si votre code sous test introduit des variables globales.

Si hasCert est déclaré dans une bibliothèque et que vous n'avez aucun contrôle sur sa création, vous pouvez dire à Mocha de l'ignorer.

Sur la ligne de commande ,

$ mocha --globals hasCert

Pour citer la documentation:

[Cette option] accepte une liste de noms de variables globales acceptés, séparés par des virgules. Par exemple, supposons que votre application expose délibérément une application nommée globale et YUI, vous souhaiterez peut-être ajouter l'application --globals, YUI.

Dans un navigateur:

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

Vous pouvez également désactiver la détection de fuite globale en transmettant:

mocha --ignore-leaks

Dans un navigateur:

mocha.setup({ignoreLeaks: true});
24
Jimchao

J'ai rencontré ce problème également, vous avez probablement oublié une instruction var quelque part comme je l'ai fait, ce qui signifie dans JS qu'une variable globale sera créée.

Vous devrez peut-être vous débrouiller seul, en fonction de la structure de votre application. J'espère que ce n'est pas du code tiers qui en est la cause. : P

Vous devez utiliser JSLint ou JSHint dans votre projet. Ils devraient vous aider à découvrir la source si elle se trouve n'importe où dans votre code.

12
Dominic Barnes

Cela peut également arriver si vous oubliez new lors d'un appel à un constructeur. Dans ce cas, this étant l'objet global, toutes les propriétés introduites dans le constructeur seront ajoutées à l'objet global.

Ce problème ne devrait pas rester longtemps sans être détecté, mais c'est un échec de test intéressant.

7

Je suis tombé sur cette réponse en essayant de trouver un moyen de supprimer les fuites JSONP telles que:

Error: global leak detected: jQuery20305777117821853608_1388095882488

Squelch jQuery JSONP "fuit" via:

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

Je rencontrais cette erreur pour plusieurs fonctions comme suit:

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

J'ai donc passé un caractère générique dans la fonction d'installation et cela a résolu mon problème.

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

Définissez vos variables de stub avant de l’utiliser.

var hasCert;

var hasCert = sinon.stub (instance, méthode);

0
Bhalke

J'ai ajouté "mocha.globals (['browserSync'])"; " ci-dessous pour résoudre mon problème. Le reste du code provient de https://mochajs.org/ - section: RUNNING MOCHA DANS LE NAVIGATEUR

<script>mocha.setup('bdd')</script>
<script src="basic-spec.js"></script>
<script>
    mocha.checkLeaks();
    mocha.globals(['jQuery']);
    mocha.globals(['___browserSync___']);  //<<== This line was added
    mocha.run();
</script>
0
Ari Singh