Nodeでのテストから始めています。 mocha、chai、およびnockの使用(外部HTTP API呼び出しをインターセプトするため)。
3つのテストを作成しましたが、すべてが合格です。ただし、3番目のテストを追加すると、テストの実行後にmochaが終了し、エラーもエラーも表示されませんでした。
3番目のテストにコメントすると、mochaは正常に終了します。
これは「問題」を引き起こすテストです:
describe('tokenizer.processFile(req, \'tokenize\')', () => {
it('should tokenize a file', async () => {
req = {
file: {
originalname: 'randomcards.txt',
buffer: cardsFile_buffer
},
user: {
displayName: user
}
};
expect(Buffer.from(await tokenizer.processFile(req, 'tokenize'))).to.deep.equal(tokensFile_buffer);
});
});
繰り返しますが、そのテストは合格であり、私を困惑させます。
Tokenizer.processFileのコードは次のとおりです。
processFile: function(req, whatTo){
combinedLogger.info(`Request to ${whatTo} ${req.file.originalname} received. Made by: ${req.user.displayName}`);
return new Promise(function(resolve, reject){
const lines = [], responses = [];
const lineReader = require('readline').createInterface({
input: require('streamifier').createReadStream(req.file.buffer)
});
lineReader.on('line', line => {
lines.Push(line);
});
lineReader.on('close', async () => {
//process every line sequentially
try {
//ensure DB connected to mass insert
await db_instance.get_pool();
for(const line of lines) {
var response;
req.current_value = line;
if (whatTo == 'tokenize'){
response = await Tokenize(line);
db_instance.insertAction(req, 'tokenize', response);
}
else if (whatTo == 'detokenize'){
combinedLogger.info(`Request to detokenize ${line} received. Made by: ${req.user.displayName}`);
response = await Detokenize(line);
db_instance.insertAction(req, 'detokenize', line);
}
responses.Push(response);
}
resolve(responses.join("\r\n"));
}
catch(error){
reject(error);
}
});
});
}
関数Tokenize(value)およびDetokenize(value)は、他の2つのテストでも呼び出されます。これらのテストは、実行されるとmochaが正常に終了します。
何がこれを引き起こしているのでしょうか?
モカバージョン:5.1.1
これに答えるのは少し遅れていることは知っていますが、同様の問題に直面していて、あなたの投稿を見ました。
Mocha 4.0.0では、ファイナライズ時のテストの動作が変更されました。 here から:
テストが「完了」したように見えてもmochaプロセスがまだ生きている場合、テストは何かが(非同期的に)スケジュールされており、適切にクリーンアップされていません。ソケットを開いたままにしましたか?
あなたの場合、createReadStream()
への呼び出しは決して閉じられなかったようです。
したがって、2つのオプションがあります。
オプションA:fsおよびその他のストリームを閉じます(推奨)
オプションB:--exit
オプション。