私は予想通り、次の機能が実行することをテストしたいと思います。ここではmochaでキャッチされていないエラーをテストするにはどうすればよいですか?
function throwNextTick(error) {
process.nextTick(function() {
throw error;
});
}
は私の試みです:
describe("throwNextTick", function() {
it("works as expected", function (next) {
var error = new Error("boo!");
var recordedError = null;
process.once("uncaughtException", function (error) {
recordedError = error;
});
throwNextTick(error);
process.nextTick(function() {
recordedError.should.be(error);
next();
});
});
});
しかし、モカは、それ自体にすべてのエラーを維持したい、と私のテストに失敗しているようですそれを取得したとき:
C:\Users\ddenicola\Programming (Synced)\pubit>mocha test/basicTest.js
throwNextTick
0) works as expected
? 1 of 1 tests failed:
1) throwNextTick works as expected:
Error: boo!
at Test.fn (C:\Users\ddenicola\Programming (Synced)\pubit\test\basicTest.js:11:21)
at Test.run (C:\Users\ddenicola\AppData\Roaming\npm\node_modules\mocha\lib\runnable.js:144:15)
at Runner.runTest (C:\Users\ddenicola\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:271:10)
at C:\Users\ddenicola\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:315:12
at next (C:\Users\ddenicola\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:199:14)
at C:\Users\ddenicola\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:208:7
at next (C:\Users\ddenicola\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:157:23)
at Array.0 (C:\Users\ddenicola\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:176:5)
at EventEmitter._tickCallback (node.js:192:40)
アイデアがありますか?
これはトリックをしましたで!あなたの答えには1つの編集しかありません。アサートがエラーをスローするので、アサートを実行する前に元のリスナーを復元する必要があります。 – Domenic
これは本当にモカのドキュメントにあるはずです!この答えを見つけるのに私は1時間かかりました。Mochaの文書化されていないエラーのキャプチャ(および失敗したテスト)と、標準エラーオブジェクト(Crockfordの助言による)を投げていない場合、エラーメッセージが表示されないという事実テストが失敗している理由を理解することは本当に難しいです。 –
最新バージョンのノード(このコメントの時点ではv0.10.5)では、 'process.listeners(eventName)'はリスナー配列のコピーを返しているので、 'pop()'を呼び出すと実際にはエミッタからリスナーを削除します。 'process.removeListener( 'uncaughtException'、originalException);' –