web-dev-qa-db-ja.com

モカのグローバルリークエラー

APN接続を開こうとしたときにグローバルリークエラーが発生したとき、 Apple Push通知ライブラリ を単体テストしようとしていました。

それは私の側の設定エラーですか、それとも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)
37
MonkeyBonkey

はい。Mochaは、テスト中のコードがグローバル変数を導入した場合に警告して失敗するグローバルリーク検出メカニズムを備えています。

hasCertがライブラリで宣言されていて、その作成を制御できない場合は、Mochaに無視するように指示できます。

コマンドライン では、

$ mocha --globals hasCert

ドキュメントを引用するには:

[このオプション]は、受け入れられるグローバル変数名のコンマ区切りリストを受け入れます。たとえば、アプリが意図的にグローバルな名前付きアプリとYUIを公開しているとすると、-globals app、YUIを追加することができます。

ブラウザで:

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

次を渡すことで、グローバルリーク検出を無効にすることもできます。

mocha --ignore-leaks

ブラウザで:

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

私もこの問題に遭遇しましたが、おそらく私がしたようにvarステートメントをどこかで忘れていました。JSでは、グローバル変数が作成されることを意味します。

アプリをどのように構成したかによっては、自分でそれを突き止める必要があるかもしれません。うまくいけば、これがサードパーティのコードによって引き起こされているのではないでしょう。 :P

プロジェクト全体で JSLint または JSHint を使用する必要があります。ソースがコードのどこかにある場合は、ソースを明らかにするのに役立ちます。

12
Dominic Barnes

これは、コンストラクタの呼び出しでnewを忘れた場合にも発生する可能性があります。その場合、thisはグローバルオブジェクトであるため、コンストラクターで導入されたプロパティはすべてグローバルオブジェクトに追加されます。

この問題は長期間検出されないはずですが、興味深いテストの失敗です。

7

次のようなJSONPリークを抑制する方法を見つけようとしたときに、この答えに遭遇しました。

Error: global leak detected: jQuery20305777117821853608_1388095882488

Squelch jQuery JSONPは次の方法で「リーク」します。

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

次のような多くの機能でこのエラーが発生しました。

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: ['*']
});
4
Saba Hassan

使用する前にスタブ変数を定義します。

var hasCert;

var hasCert = sinon.stub(instance、method);

0
jsduniya

「mocha.globals(['browserSync']);」を追加しました私の問題を解決するために以下。コードの残りの部分は https://mochajs.org/ からのものです-セクション:ブラウザでモカを実行する

<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