ti-enxame.com

erros globais de vazamento em mocha

Eu estava tentando testar a unidade Biblioteca de notificações do Apple Push quando eu recebi um erro de vazamento global tentando abrir uma conexão APN. 

Isso é um erro de configuração da minha parte ou um erro no node-apn ou mocha?

Não tenho certeza se entendi o que a CheckGlobals está fazendo ... é só verificar se alguma variável global está sendo definida?

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

Sim, o Mocha possui um mecanismo de detecção de vazamento global que alerta e falha se o código em teste apresentar variáveis ​​globais.

Se hasCert é declarado em uma biblioteca e você não tem controle sobre sua criação, você pode dizer ao Mocha para ignorá-lo.

Na linha de comando

$ mocha --globals hasCert

Para citar a documentação:

[Esta opção] aceita uma lista delimitada por vírgulas de nomes de variáveis ​​globais aceitos. Por exemplo, suponha que seu aplicativo expõe deliberadamente um aplicativo chamado global e YUI, você pode querer adicionar um aplicativo --globals, YUI.

Em um navegador:

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

Você também pode desativar a detecção de vazamentos globais passando:

mocha --ignore-leaks

Em um navegador:

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

Eu corri para este problema também, você provavelmente esqueceu uma instrução var em algum lugar como eu fiz, que em JS significa que uma variável global será criada.

Você pode ter que procurá-lo dependendo de como você estruturou seu aplicativo, e esperamos que não seja um código de terceiros que está causando isso. : P

Você deve usar JSLint ou JSHint através do seu projeto, eles devem ajudar a descobrir a origem se ela estiver em qualquer lugar no seu código.

12
Dominic Barnes

Isso também pode acontecer se você esquecer new em uma chamada para um construtor. Nesse caso, this é o objeto global, portanto, quaisquer propriedades introduzidas no construtor serão adicionadas ao objeto global.

Esse problema não deve passar despercebido por muito tempo, mas é uma falha interessante no teste.

7
Gudlaugur Egilsson

Eu me deparei com essa resposta quando estou tentando descobrir como silenciar vazamentos de JSONP como:

Error: global leak detected: jQuery20305777117821853608_1388095882488

Squelch jQuery JSONP "vaza" via:

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

Eu estava encontrando esse erro para muitas funções da seguinte maneira:

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

Então eu passei um curinga na função de configuração e resolveu o meu problema.

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

Defina suas variáveis ​​stub antes de usá-lo.

var hasCert;

var hasCert = sinon.stub (instância, método);

0
Bhalke

Eu adicionei "mocha.globals (['browserSync']);" abaixo para corrigir o meu problema. O resto do código é de https://mochajs.org/ - seção: RUNNING MOCHA NO BROWSER

<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