<p>モカ4はモカ3ずは異なり終了したせん</p>

䜜成日 2017幎10月03日  Â·  61コメント  Â·  ゜ヌス: mochajs/mocha

前提条件

  • [x] common mistakeラベルを䜿甚しお問題を盞互参照たした
  • [x] Mochaなしで同じ環境やトランスパむラヌ構成を䜿甚しお、次䞖代ESの問題ず構文の問題をチェックし、問題の環境で実際にサポヌトされおいない機胜やコヌドのバグではないこずを確認したした。
  • [x]「スモヌクテスト」実際のテストスむヌトの倖郚で実行しおテストするコヌドを実行し、問題がテスト察象のコヌド、Mochaの䜿甚、たたはMocha自䜓にあるかどうかをより正確に把握したす。
  • [x]ロヌカルにむンストヌルされたバヌゞョンずグロヌバルにむンストヌルされたバヌゞョンのMochaの間に矛盟がないこずを確認したした。 あなたはそれらを芋぀けるこずができたす
    node node_modules/.bin/mocha --version ロヌカルおよびmocha --version グロヌバル。 グロヌバルにむンストヌルされたモカの䜿甚は避けるこずをお勧めしたす。

説明

私はここ数幎特定のテストセットを実行しおいお、垞に最新のモカにアップグレヌドしおいお、すべおが倧䞈倫でした。
mocha 4では、突然すべおのテストに合栌したしたが、远加したこずはありたせんが、-no-exitが自動的に远加されたかのように終了したせん。

再珟する手順

予想される行動
すべおのテストが終了するず、プロセスの存圚を劚げるタむムアりトたたは゜ケットがある堎合でも、プロセスは停止する必芁がありたす。

実際の動䜜
Mocha 4プロセスは、-no-exitフラグを持぀mocha3のように氞遠に埅機したす

再珟頻床
私たちのテストでは垞に。 私は700のテストを持っおいるので、どれが問題を匕き起こしおいるのか、あるいはそれがコヌドベヌスにあるのかを特定するのは難しいです。

バヌゞョン

mocha4.0.0は倱敗したす。 その前にすべおがうたくいきたす。

faq question

最も参考になるコメント

迅速な修正 --exit䜿甚を提䟛する以倖に、欠陥のあるテストを芋぀けるずいう䞻芁な問題をナヌザヌに任せたこずに同意したす。 今は自分で苊劎しおいたすが、メゞャヌバヌゞョンをアップグレヌドするずきは、やみくもにアップグレヌドするのではなく、リリヌスノヌトを必ず読んでください。

党おのコメント61件

たったく同じ問題が発生しおいたす。 テストに合栌するず、モカがハングしたす。 私のTravisCIを参照しおください
https://travis-ci.org/mkrufky/node-dvbtee/builds/282593109

たた、video-dev /hls.jsでこれず同じ問題に気づきたした-mochaはテストに合栌した埌にハングしたす
https://travis-ci.org/video-dev/hls.js/builds/282590422

リリヌスノヌトを読みたしたか https://boneskull.com/mocha-v4-nears-release/#mochawontforceexit

ありがずう。 モカのりェブサむトは、この重倧な倉曎で曎新されおいたせん。 そこにあるCLI匕数はそれに぀いお蚀及しおいたせん。

迅速な修正 --exit䜿甚を提䟛する以倖に、欠陥のあるテストを芋぀けるずいう䞻芁な問題をナヌザヌに任せたこずに同意したす。 今は自分で苊劎しおいたすが、メゞャヌバヌゞョンをアップグレヌドするずきは、やみくもにアップグレヌドするのではなく、リリヌスノヌトを必ず読んでください。

リリヌスノヌトでは、 https//github.com/mafintosh/why-is-node-running/issues/7が原因で機胜しない堎合を陀いお、 why-is-node-running䜿甚を掚奚しおい

これもヒット。 デフォルトぞの倉曎の背埌にあるwhy-is-node-runningが攟棄されお壊れおいるこずを考えるず、これは最もナヌザヌフレンドリヌな倉曎ではない可胜性がありたす。

こんにちは、みんな、

たず、この点で倧たかなアップグレヌドパスに぀いおお詫びしたいず思いたす。Mochaがテストの実行を維持しおいるものをナヌザヌに通知する必芁があるこずに間違いなく同意したすそうすれば、プロセスを開いたたたにする必芁さえありたせん。それらが完了した埌に倱敗を返す理由ですが、ただ完党に満足のいく方法を芋぀けおいたせん。 バヌゞョン4は、PhantomJS 1.xのむンストヌラヌの倉曎が原因でCIが倱敗したためにプロンプ​​トが衚瀺されたため、必芁な時間を取埗できたせんでしたpackage-lock.jsonがあれば、おそらくこれを防ぐこずができたでしょう事前に蚭定したしたが、それでも動䜜させるこずができたせん。 why-is-node-runningは、私たちが圹立぀ずわかった1぀のツヌル--expose-internalsの芁件ず、プログラムで出力を取埗するための適切な方法の欠劂の間。 いく぀かの手順を実行するず、機胜するこずがわかりたした。

  • --expose-internals  node --expose-internals node_modules/mocha/bin/_mocha でMochaを実行する
  • 最初のテストファむルたずえば、 mocha.optsリストされおいるにafter(require('why-is-node-running'))含めるたたは少なくずも最初にようにしたす

...䜕もないよりはたしですがリリヌスノヌトを曎新しおこれをより詳现に説明できるかどうかはわかりたすが、より良いオプションを知っおいる人がい

たた、サむトのドキュメントが䞍足しおいるこずをお詫びしたす。できるだけ早く曎新したす。 2987が完了するず、バヌゞョン/公開スクリプトの自動郚分にするこずもできたす

@ScottFreeCode

borisov<strong i="7">@glossy</strong>:~/test/mocha $ node --version
v6.11.3

borisov<strong i="8">@glossy</strong>:~/test/mocha $ ./node_modules/.bin/mocha --version
4.0.0

borisov<strong i="9">@glossy</strong>:~/test/mocha $ ./node_modules/.bin/mocha --expose-internals test.spec.js 
  error: unknown option `--expose-internals'

線集

これは機胜したす

node --expose-internals ./node_modules/.bin/mocha test.spec.js

申し蚳ありたせんが、それに぀いおは明確ではありたせん--expose-internalsは、 ./node_modules/.bin/mocha代わりにnode --expose-internals ./node_modules/mocha/bin/_mocha実行するこずで䜿甚できるノヌドオプションです。 Mochaが特定のフラグをノヌドに枡し、それらのフラグに--expose-internalsを远加できるため、これも修正できたす。

ドキュメントずMochaのノヌドフラグの曎新をそれぞれ远跡するために、mochajs / mochajs.github.io81ず3045を䜜成したした。 少なくずもドキュメントが曎新されるたで、この問題は開いたたたになりたす。

@ScottFreeCodeは、 --expose-internalsがノヌド<= 6でのみ機胜するこずを䌝えたいず思うかもしれたせん。うたくいけば、人々は䞀時的にノヌド6にダりングレヌドしお、キャンセルたたは参照解陀する必芁のあるタむマヌ、たたは必芁な゜ケットを芋぀けるこずができたす。 unref'ed 。 たた、人指すようにしたいかもしれafterずafterEachフックをクリヌンアップを行うこず。

すべおのテストが完了したずきにmochaが呌び出すグロヌバルな「埌」フックはありたすか

ずにかく、私は助けに感謝し、モカに感謝したす

--expose-internalsはノヌド<= 6でのみ機胜するこずに泚意しおください。

本気ですか Node8.6.0でテストしたした。 すべおのOSにあるわけではありたせんが、持っおいるすべおのボックスを起動しお、トリプルチェックする必芁があるず思いたす...

これは、圓面の間回避するための

本気ですか Node8.6.0でテストしたした。 すべおのOSにあるわけではありたせんが、持っおいるすべおのボックスを起動しお、トリプルチェックする必芁があるず思いたす...

これは、モゞュヌルからの出力をトリガヌするずいう点で「機胜」したすが、Node.jsのバヌゞョンに関係なく、実際には倚くの情報を提䟛したせん。

サむトにいく぀かの曎新を远加したすが、3045に関する今埌のコメントを参照しおください。

これは、モゞュヌルからの出力をトリガヌするずいう点で「機胜」したすが、Node.jsのバヌゞョンに関係なく、実際には倚くの情報を提䟛したせん。

setTimeoutずsetImmediate䟿利なスタックトレヌスを提䟛したすが、リスニングサヌバヌなどの他のものに぀いおは実際の情報はたったくありたせん最近、サヌバヌがどのように機胜しおいるかを理解しようずしたずきにわかりたしたやっおいたす。 芁旚の「async-dump」の䟋は、新しいバヌゞョンのNodeでのみ䜿甚可胜ですが、すべおに察しお機胜する --expose-internals必芁ずしないずいう点で真の利点がありたす。

私の䞀般的なアドバむスは、「髪を抜く堎合は、 --exitを远加しおリラックスする」ずいうものだず思いたす。 次に、次のプロゞェクトには䜿甚しないでくださいwink

クロヌズドPRに぀いお再床コメントしお申し蚳ありたせんが、ここにナヌザヌフレンドリヌな解決策があるかもしれたせん

ランナヌが3秒ほど終了した埌、倉曎された動䜜に関する譊告をログに蚘録できたすが、プロセスは終了したせんでした。
ランナヌが終了した埌にsetTimeout()を远加し、 timeout.unrefを呌び出しお、このタむムアりトによっおプロセスの終了が劚げられないようにする必芁がありたす。 タむムアりトが実行された堎合は、譊告の時間です😉

私はそれを考慮したしたが、それがレポヌタヌや他の統合で他の問題を匕き起こすのではないかず心配しおいたす...私はそれが起こらないこずを蚌明するこずはできたせん。

それでも問題が発生し、 why-is-node-runningが正しく機胜しない堎合は、 wtfnodeを確認しお

そのパッケヌゞは私にずっおはるかにうたく機胜したした。

既存のテストが突然終了しなくなるず、控えめに蚀っおも戞惑うこずがありたす。 リリヌスノヌトに新しい動䜜に぀いおの蚀及があり

私は、after関数でredis.quitを呌び出すこずを匷制する新しいテストで偶然に倉曎を発芋したした。私は、正しくお適切ず思われる新しい動䜜に間違いなく満足しおいたす。

今回は[この芁点]を䜿甚する必芁はありたせんでしたが、 @ boneskullですでに述べたように、どの非同期タスクが完了しおおらず、プロセスの終了を

この新しい動䜜の倉曎の背埌にある参照チケットの問題を完党には理解しおいないこずを認めなければなりたせん。

AFAICT、それは未凊理のPromise拒吊ず関係がありたす。 しかし、ごめんなさい。モカのテストに䞎えられた玄束を解決しないず、モカは成功せず、そのテストから続行したせん --bailが蚭定されおいる堎合。 したがっお、拒吊ハンドラヌを持たない、実装が䞍十分なネストされたPromiseである必芁がありたすが、含たれおいるコヌドはずにかく解決されおいる必芁がありたす。

この堎合、これらの問題を怜出するのがモカの仕事であるかどうかはわかりたせん。 たた、これらの問題を怜出するために䜕らかの魔法を実装するず、珟圚の正しく蚘述されたテストが無期限にハングする可胜性がある堎合、その魔法はオプトアりトではなくオプトむンの動䜜である必芁がありたす。぀たり、 --no-exitではなく--exit 。

公匏のnode-mongodb-nativeドラむバヌを䜿甚しおすべおのテストを調べおい.close()ですべおを閉じないため、蚭蚈䞊のようです。 私のテストは正しく動䜜しおいたすが、䟝存関係は正しく動䜜しおいたせんたたは、そうではありたせんかスクリプトが他の堎所で終了するたで、゜ケットたたはファむル蚘述子が長匕くのは悪い動䜜であるずいう事実を必ずしも知りたせん—そうですか。 それで、私はここで䜕をテストしおいたすか 私のコヌド、たたは他の誰かのコヌド 私は自分でテストしおいるず思っおいたしたが、明らかにそうではありたせんでした。

確かに、 --exitフラグを远加するこずはできたすが、次の人は远加できない可胜性がありたす。いずれにしおも、完党に现かいコヌドをテストしお完党に现かいテストを蚘述でき、それでもランダムな䟝存関係の原因があるのは間違っおいるようです。私のテストは無期限にハングしたす。

最埌のafter()フックにprocess.exit()を远加するず、テストはハングしたせんが、 --watch おそらく他の機胜だけでなく、ひどく壊れたす。倉曎を監芖できなくなりたすが、カヌ゜ルのないシェルに排出されたす。

私がここで無知な人である可胜性が非垞に高いです確かに私が埗おいないこずがたくさんあり、倚くの人々が関わっおいるので、私はそう思う傟向がありたす:)、私はちょうどこの党䜓のように感じたす物事は完党ではありたせん...そうです...

也杯:)

線集この動䜜を考えるず、Mochaテスト内で--watchで実行されおいるかどうかを確認しお、 process.exit()を呌び出さないようにし、問題を解決する方法はありたすか

@DanielSmedegaardBuus TL; DR on the solution --exitをmocha.optsファむルに入れたす。 これは通垞、より䞀般的なヒントずしお、Mochaの実行時に垞に蚭定する必芁があるすべおの゜リュヌションです。この倉曎の詳现に぀いおは、以䞋を参照しおください。

2640は、promiseの拒吊に関するものであり、䜕もするこずを意図したものではなく、promise以倖の非同期テストコヌドからスロヌされる同期䟋倖ず䞀臎させるこずを目的ずしおおり、

これは、Promiseが実装やテストで䜿甚されおいるかどうかに関係なく、リ゜ヌス、リスナヌ、たたは進行䞭の䜜業をセットアップし、クリヌンアップしないテストに関するものです。 䟋えば

接続の開始ず終了を含む、WebSocketに基づくAPIのテストがありたす。 このAPIはバグがあり、接続を正しく閉じおいたせんでしたが、基瀎ずなる接続が正しく凊理されたこずをテストに断蚀する方法が実際にはなかったため、テストに合栌したした。 自分のコヌドのみを厳密にテストした堎合、誀っお正しい方法であるず誀っお考えた方法で䟝存関係を䜿甚しおいるこずを確認できたした。ただし、最初に䜿甚法の正確性に関する問題をキャッチするために、実際のWebSocketで正確にテストしおいたした-単䜓テストを補完する統合テスト。 --no-exit動䜜Mocha3の;珟圚はMocha4のデフォルトに切り替えたずきにその゚ラヌをキャッチし、これらのテストを実行するずノヌドが閉じないこずを発芋したした。 WebSocket接続はただリッスンしおいたす。

゚ラヌが独自のコヌドではなく䟝存関係にある可胜性があるのは事実ですが、それでも、その䟝存関係の特定のバヌゞョンを出荷する前に、䞊蚘で瀺唆したように、これはそもそも単䜓テストよりも統合テストに適しおいたすが、理想的にはプロゞェクトに䞡方が含たれおいたす。

もちろん、これは必ずしも必芁ではありたせん。堎合によっおは、この性質のリ゜ヌスは、プロセスが匷制終了されるたで存続するこずを意味する堎合や、リ゜ヌスの他のクリヌンアップが実際には重芁でなくおもノヌドを存続させる堎合がありたす。個々のメンバヌを再利甚するリ゜ヌスプヌルの䞀郚である可胜性があり、プヌル党䜓をクリヌンアップする必芁はありたせん。そのような堎合、 --exitが正しいでしょう。 デフォルトの動䜜が倉曎された理由は、そのような問題の可芖性を高めるためでした。以前は、 --no-exitを詊しおこれらの皮類の゚ラヌをチェックするこずを知らなかったでしょうが、デフォルトでそれらに遭遇したす動䜜が正しいたたは少なくずも心配する䟡倀がないず刀断した堎合堎合は--exitたす。

もちろん、これが発生したずきにぶら䞋がっおいるがありたす。 サポヌトされおいるすべおのバヌゞョンのNodeで機胜し、ただ実行されおいる可胜性のあるものに干枉するこずなく、実行䞭のものを実際にプログラムでチェックする方法を統合できるかどうかをただ理解する必芁がありたす適切な譊告たたぱラヌを衚瀺できたす。モカが終わりに達したずきにクリヌンアップたたはクロヌズしたす。

申し蚳ありたせんが、これは非垞に苛立たしいこずでした。 モカが出ない理由を調べようずしおいたずころです。 https://boneskull.com/mocha-v4-nears-release/#mochawontforceexitはwhy-is-node-runningにリンクしおいるので、行っおそのモゞュヌルを䜿おうずするず、「゚ラヌモゞュヌルが芋぀かりたせん」ずいう䞍可解なメッセヌゞが衚瀺されたす。 internal / linkedlist '...スタックトレヌス」、そしお--expose-internalsが機胜しない理由を芋぀けようずしおりサギの穎をたどった埌、私はhttps://github.com/mochajs/mocha/に行き着きたしたissues / 3045が衚瀺されたすが、 why-is-node-runningは、開いたたたの既知のハンドルが1぀ず、䞍明なハンドルがいく぀かあるこずを瀺しおいたすが、䜕もリストされおいたせん。

これはこれを提起するのに適切な堎所ではないかもしれたせんが、モカのドキュメントは、仕事に取り掛かるためにこれほど倚くのグヌグルず問題ダむビングを必芁ずする解決策を掚奚するべきではありたせん。 私は物事を取り出しお远加しようずしおいたしたが、動䜜は非垞に䞀貫しおいたせんでした。 将来のナヌザヌず私の正気のために

package.json

"scripts": {
    "test": "mocha --exit"
}

それが私にできる最善のこずです。

@jeffvandyke私はあなたの欲求䞍満を理解し、同じ問題を経隓したした-しかし、玄束の背埌にある䞻匵がある堎合は、この倉曎に感謝するかもしれたせん。

非同期動䜜が䞍安定な仕様がいく぀かありたした。 仕様の実行順序によっおは、キャッチされなかったプロミス拒吊゚ラヌがコン゜ヌルに蚘録され、合栌した他の䜕癟ものテストによっお芋えなくなるか、拒吊が発生する前にノヌドむンスタンスがシャットダりンしたす。

陀去した埌、 --exit私からmocha.opts 、拒吊された玄束が確実に゚ラヌを蚘録し、それらのバグを匷調衚瀺したす。

私は知っおいたす、倚くの共通の痛み:)モカの文曞化された動䜜は実際には私には正しいように聞こえたすが、私の5぀のテストは十分に単玔に芋えたすが、ノヌドフェッチを䜿甚しおAPIをテストするだけですが、モカが終了しない理由はただわかりたせん、それらはすべお正垞に合栌したすがはい、倱敗する可胜性もありたす。 why-is-node-runningが機胜しない理由を理解するためにもっず時間を費やすこずができたしたが、他の人のコヌドに぀いおうんざりしおいるので、ずりあえず䌑憩する぀もりです。

私はおそらくそれで遊んでいくでしょう、そしお私が再珟可胜な䜕かを埗るこずができれば、私は新しい問題を開くかもしれたせん、しかし玄束はありたせん。

新しいノヌドむンスペクタヌのデバッガヌをお勧めしたす...それは良い非同期トレヌスを持っおいたす。

わヌい wtfnodeは、これに光を圓おるのにはるかに優れおいるこずがresult.text()たたは.json()を呌び出す必芁があるこずがわかりたした。そうしないず、接続が開いたたたになりたす。 wtfnode ./node_modules/.bin/_mochaを実行し、 Ctrl-Cを抌すず、開いおいる接続が衚瀺されたした。

ドキュメントがwhy-is-node-runningよりもこのパッケヌゞを掚奚しおいればもっず簡単だったず思いたす。

別の提案モカが終了しない堎合に䜕らかの譊告を出すずいうです。 モカがwtfnode䜿甚しお、しばらく経過した埌もノヌドを存続させおいるアクティブなハンドルを䞀芧衚瀺できれば䟿利です。

正しいこずが䜕であれ、モカが出ない理由を理解するためにここたで芋なければならなかったのはゎミだず思いたす。 ずにかく、私は私の提案をしたした:)

こんにちは、みんな、
私は、これは私が考える可胜性があり、モカはただ自分自身で終了するには倱敗した最も基本的なテストでは、この機胜はただ正垞に動䜜しおいないかもしれないず思いたす。 --no-exitは優れたデフォルトのオプションであり、私はそれですべおですが、私が間違っおいるこずを理解できおいないか、mochaに本質的に䜕かが間違っおおり、最も単玔なテストでさえ閉じるこずができたせん。

describe('describe', function() { it('it', function(done) { done(); }); });

抂芁 --exitは機胜したすが、 --no-exitはテストを終了したせん。

私の堎合、 Koaアプリケヌションを䜿甚しおおり、Mocha 4 + Supertestでテストしおいたす。

「誀怜知を回避し、より良いテスト方法を奚励するために」リリヌスノヌトに続くdone呌び出しず䞀緒にサヌバヌを

前

request(app.listen())
  .post('/')
  .send(requestSrc)
  .expect({ f: {} }, done)

埌

const server = app.listen()

request(server)
  .post('/')
  .send(requestSrc)
  .expect({ f: {} }, () => {
    server.close()
    done()
  })

それがsomenoeに圹立぀こずを願っおいたす。

私はすべおのテストの前にモカのブヌトストラップを行っおいたす。 基本的に、同じプロセスで小さなHTTPサヌバヌを起動したす。

モカの実行が停止した埌、フックしおシャットダりンできるむベントはありたすか シャットダりンしたいのですが、その時だけです。

この機胜の背埌にあるアむデアが倧奜きです。ぶら䞋がっおいるむベントがあるかどうかを確認するための良いテストです。

@evert afterサヌバヌを閉じおも機胜したせんか

モカが行われた埌に実行されるグロヌバルな「すべおの埌」はありたすか 私はそれを逃したかもしれたせん ドキュメントで芋぀かりたせんでした。

はい、グロヌバルafterフックがありたす。

ありがずうございたした 私はそれを逃したした、申し蚳ありたせん/ ctrl-fの甚語を知りたせんでした。

wtfnodeは私にずっお実際には機胜したせんでした。 私が芋るこずができたのは、モカによっお開始されたいく぀かのPIDがぶら䞋がっおいたずいうこずだけでした。

䞀方、 @ boneskullの芁点は機胜したした https //github.com/mochajs/mocha/issues/3044#issuecomment-351299745。 ありがずうございたした

wtfnodeは、 mochaではなく、 _mochaに察しお実行する必芁がありたす。

--exitありがずう。 それは私のためにそれを修正したした。

このスクリプトをpackage.jsonに入力したす。
「スクリプト」{
"test" "mocha --exit"
}

私はこのスレッドで蚀及されおいるさたざたな救枈策を詊したした

  • why-is-node-runningは出力を生成したせん
  • wtfnodeは出力を生成したすが、ファむル蚘述子/゜ケット/サヌバヌ/タむマヌがコヌド内のどこに䜜成されおいるかを刀別するには䞍十分です
  • async_hooksデバッグメ゜ッド゚ラヌ
  • –exitをmocha cmd lineフラグに远加するず、exitになりたす

したがっお、 @ ProfJigsawをフォロヌし、

それがデバッガヌの目的です、IMO。 スクリプトが終了しなかった堎合、どのようにデバッグしたすか

https://github.com/GoogleChromeLabs/ndbはクヌルなプロゞェクトです。

オフトピック私はこのチケットが倧奜きです。それが提䟛し続けるトラブルシュヌティングツヌルに関する情報のためだけです :)

@borisovg実際に解決策を提䟛した堎合、このチケットがどれほど玠晎らしいか想像しおみおください。 :)
@boneskull私が

@mjgsそれは私のために行いたした- wtfnodeは機胜したしたが、 _mochaバむナリではなく、 mocha _mochaバむナリで䜿甚した堎合にのみ機胜したした

$ wtfnode ./node_modules/.bin/_mocha my-shitty-code.spec.js 


  tests
    ✓ some test


  1 passing (5ms)

^C[WTF Node?] open handles:
- File descriptors: (note: stdio always exists)
  - fd 1 (tty) (stdio)
  - fd 2 (tty) (stdio)
- Servers:
  - :::8080 (HTTP)
    - Listeners:
      - request: (anonymous) @ /home/borisov/test/my-shitty-code.js:4
- Intervals:
  - (5000 ~ 5 s) (anonymous) @ /home/borisov/test/my-shitty-code.js:8

@borisovg本圓に

wtfnodeがmongodb接続が開いおいるこずを瀺しおいる堎合、それは開いおいたす。 なぜあなたはそれが間違っおいるず思いたすか

@evertあなたは私が曞いたものを誀解したかもしれないず思う

最小限の䟋は説明に最適であり、実際には、衚瀺されおいるものず同様の出力を確認するのに圹立ちたすが、長幎にわたっお䜜成された実際のコヌドでは、これらの接続を芋぀けるのはそれほど簡単ではありたせん。 ただ開いおいるmongo接続があるこずを知っおおくのは良いこずですが、実際にそれらを芋぀けるこずは簡単ではありたせん。 私は最終的にいく぀かの開いおいる接続を芋぀けたしたが、それらはすべおの接続が怜蚌可胜に閉じられた衚面レベルよりもコヌド内ではるかに深く、wtfnodeはマングヌスモゞュヌルパスをリストするこずによっおそれらが存圚しただけの堎所を特定するのに圹立ちたせんでした。 ポヌト番号だけに基づいお远跡するものがただいく぀かありたすが、期埅しおいたす。

Firebaseず通信するサヌバヌレス関数を䜜成するずきにこの問題が発生したした。 管理SDKがオヌプンハンドルを無期限に維持しおいるこずが刀明したした。 この倉曎およびその埌のwtfnode䜿甚の提案により、私はその事実を特定し、将来の頭痛およびコストを倧幅に節玄するこずができたした。

私の意芋では、ある皮の「Xが長くハングし、出力がない堎合は、テキストをstdoutにスロヌする」ロゞックを含めるず非垞に圹立ちたす。 それがどれほど実珟可胜か、たたはそのような改善を生み出すためにどれだけの垯域幅が利甚できるかはわかりたせんが、それは「wtfが私のモカで起こっおいる」ずいう最初の欲求䞍満を和らげるのに圹立぀かもしれないず思いたす。

var timers = sinon.useFakeTimers({
    now: new Date().getTime(),
    shouldAdvanceTime: true,
});

timers.restore();を忘れるず、プロセスは氞久にハングしたす。

ここに送信された@pgiladのドキュメントに基づいお、私にはよりクリヌンな゜リュヌションがありたす。 ドキュメントが蚀うように

誀怜知を回避し、より良いテストプラクティスを促進するために、Mochaは、実行を実行する必芁があるず刀断したずきに、process.exitを介しお自動的に自殺するこずはなくなりたした。

よりクリヌンな解決策は、グロヌバルafter関数 describe関数の倖偎にあるafter を䜜成するこずです。 exit-mocha.jsような別のファむルで䜜成するこずをお勧めしたす。 exit-mocha必芁な堎合。 埌に送信されるコヌルバックは、゚ラヌなしで終了するノヌドプロセスを正垞に終了させるこずができたす。 ファむルは、別のテストファむルであるかのようにmocha cliに送信できたす --exitフラグをシミュレヌトできたす

exit-mocha.jsたたはexit-mocha

after('Exit mocha gracefully after finishing all tests execution'. function () {
  // Exit node process
  process.exit();
});

次に、次のようなモカテストを実行できたす。

mocha exit-mocha test/**/*.spec.js

たたは

mocha exit-mocha.js test/**/*.spec.js

test/**/*.spec.jsで行ったように、テストファむルの名前にワむルドカヌドを䜿甚しおいる堎合は、 exit-mochaファむルの名前がワむルドカヌドパタヌンず䞀臎しないこずが重芁です。䞀臎しない堎合は、䞀臎したせん。あなたがそれを「旗」ずしお䜿うこずが可胜である

@ vctr90これは玠晎らしい解決策ですが、䟋ではコンマが必芁な期間がありたす。 たた、すべおを次のようにコヌドゎルフするこずもできたす。

after('Exit mocha gracefully after finishing all tests execution', process.exit);

これをMocha本䜓に远加するず、誰かが傷぀く理由明らかに倚くの人に圹立぀ために぀いお、開発者がチャむムを鳎らす可胜性はありたすか

@machineghost私は2぀の理由で新しい動䜜が奜きです

  1. 「䜜業が完了した」埌、他のラむブラリはほずんど終了したせん。 たずえば、ノヌドTCPサヌバヌを閉じおも、自動的に終了はトリガヌされたせん。 このように、他のラむブラリず䞀貫性がありたす。
  2. ノヌドが終了しない堎合は、解決を埅っおいるむベントがただあるこずを意味したす。 各テストの埌に物事がクリヌンアップされるように、コヌドを改善しおみるこずをお勧めしたす。 たた、メモリリヌクがあるこずを瀺唆しおいる可胜性もありたす。

したがっお、これに遭遇したずき、これは、コヌドをクリヌンアップしお、それが起こらないようにするためのむンセンティブです。

これに぀いおのあなたの芋方は、「私はメモリリヌクを気にしない」、たたは「これは私のアプリケヌションで修正する䟡倀がない」かもしれたせん。 あなたがこのカテゎリにしおいる堎合は最も簡単に䜜るこずですmocha.optsおよび远加--exit 。

これは信号ではなく、より倚くのノむズを発生させるこずであるように私には思えたす。ほずんどの堎合、モカが最埌にハングしたため、誰のアプリも良くなるこずはありたせん。

Mochaがデフォルトになる堎合は、テストおよびすべおのafter / afterEach呌び出しが終了したずきにデフォルトで終了する必芁があるようです。 「人工テスト環境は人工的だ」ず人々に䌝えるためだけにそうしないこずは、倧倚数のナヌザヌたたはたずもな少数掟に利益をもたらしたせん。

人々は本圓に閉じおいない接続をデバッグしたい堎合は、それはあなたがのためのオプションを提䟛する堎合でなければなりたせんようです。 しかし、それ以倖の時間は、ラむブラリのナヌザヌが他のすべおの人を「テスト環境にいお、10億もの可胜性のあるものの1぀が開いおいる」ず混乱させるこずは本圓に有益ですか

別の蚀い方をすれば、これに遭遇した人の99に「 --exit 」ず蚀う堎合、おそらく--exitは特別なオプションではないはずです。提䟛する...おそらくデフォルトの動䜜はナヌザヌケヌスの99を提䟛するこずですもちろん、ナヌザヌに--tell-me-if-I-have-unclosed-stuff-in-my-testing-environment-and-that-is-actually-what-i-am-trying-to-find-outの_option_を提䟛したす

぀たり、あなたが

PS私はちょうどこれに出くわしたした https  非テストコヌドこの「機胜」により、アプリでknex.destroy()を呌び出す必芁があるず誀っお考えられたした。

芁玄バヌゞョン

ナむスパヌ゜ン通垞、明瀺的にknex.destroyを呌び出す必芁はありたせん。これは、ドキュメント自䜓が私の匷調ず蚀っおいるこずによっお暗瀺されおいたす。

ナむスパヌ゜ン匕甚ドキュメント

混乱しおいる人knex.destroyを呌び出さないず、スクリプトがハングしたす。 では、knex.destroyを明瀺的に呌び出す必芁がないずいうのはどういう意味ですか

ナむスパヌ゜ンああ、これはモカのためだず他の堎所でだけ蚀った。 通垞のサヌバヌの䜿甚では、接続プヌルを砎棄する必芁はありたせん。Mochaの堎合は、グロヌバルな砎棄フックを調べるこずをお勧めしたす。futurestud.io/ tutorials / を参照しおください。

しかし、明確にするために、このナヌザヌには䜜業環境があり、モカは本質的に完党に良いコヌドが間違っおいるず蚀ったため、接続を砎壊するこずによっお䜜成したバグを解決しようずする時間を誰が知っおいるかを倱いたした。 そしお、それは公共の堎でそれを行うために起こった、ず私は芋るこずが起こった人だけで、この1䞍運な人です。

だから、私が䌝えようずしおいるのは、これは哲孊的に正しいこずだけではなく、いく぀かのノむズが有甚な信号を芆い隠しおいるずいうこずでもありたせん...この動䜜は実際に害を匕き起こし、プログラマヌに時間を浪費させおいたす颚車で。

すみたせん、あなたの疲れた点を正盎な質問ず間違えたした。 答えお埌悔しおいたす。 たぶん、開発者はこのスレッドをロックするこずができたす。

"mocha --reporter mocha-allure-reporter ./tests/controllers --exit"は私のために働いた。 実際、 --exitは非垞に優れた回避策です。 プロゞェクトではバヌゞョン5.2.0を䜿甚しおいたす。

「プログラムで」mochaを䜿甚するずきに--exitフラグを䜿甚するのず同等の効果を埗る方法はありたすか

exit / noexitの文曞化されたオプションも、NodeJSAPIの䜿甚䞭にフラグ文字列を枡す䞀般的な方法も衚瀺されたせん。

他のオプションのパタヌンに埓っお、私は詊したした

const mocha = new Mocha({
    exit: true,
});

しかし、望たしい効果を埗るこずができたせんでした。

https://github.com/mochajs/mocha/blob/master/lib/mocha.jsをざっず調べたずころ、このオプションをドキュメントだけでなく゜ヌスにも远加する必芁があるこずがわかりたした。

迅速な修正 --exit䜿甚を提䟛する以倖に、欠陥のあるテストを芋぀けるずいう䞻芁な問題をナヌザヌに任せたこずに同意したす。 今は自分で苊劎しおいたすが、メゞャヌバヌゞョンをアップグレヌドするずきは、やみくもにアップグレヌドするのではなく、リリヌスノヌトを必ず読んでください。

どのくらい正確にそれを枡したすか これは私のpackage.jsonスクリプトです

"scripts": { "test": "istanbul cover node_modules/mocha/bin/_mocha --exit test/Testcases/ " }そしおそれは機胜しおいたせん

迅速な修正 --exit䜿甚を提䟛する以倖に、欠陥のあるテストを芋぀けるずいう䞻芁な問題をナヌザヌに任せたこずに同意したす。 今は自分で苊劎しおいたすが、メゞャヌバヌゞョンをアップグレヌドするずきは、やみくもにアップグレヌドするのではなく、リリヌスノヌトを必ず読んでください。

どのくらい正確にそれを枡したすか これは私のpackage.jsonスクリプトです

"scripts": { "test": "istanbul cover node_modules/mocha/bin/_mocha --exit test/Testcases/ " }そしおそれは機胜しおいたせん

同じ問題があり、私だけではないず思いたす。 私はただ移動しなければなりたせんでした-最埌に終了したす。
これは機胜したせんでした
むスタンブヌルカバヌ./node_modules/mocha/bin/_mocha--exit --test / .test.jsこれは私を動かしたしたistanbul cover ./node_modules/mocha/bin/_mocha --test / .test.js --exit

exitは、プログラムでMochaを実行しおいるずきは䜕もしたせん、fwiw。 プロセスは、Mocha-the-libraryではなく、CLIラッパヌによっお匷制的に終了されたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡