mochaフレームワークの下で、非同期テストコードエラーによる問題---使用例タイムアウトエラー
4030 ワード
今日は抹茶(mocha)でテストをしましたが、いつもタイムアウトしているテスト項目がありました.
上記のコードの実行結果は、タイムアウトによるエラーのみです.
timeoutをもっと長く設定しても始まらないし、コマンドはmysqlで即時に返されるので、タイムアウトの問題ではないようです.
テストオブジェクトDbFactoryでqのpromiseオブジェクトが使用されているため、defererオブジェクトがずっとトリガーされていないのではないかと疑い始め、デバッグ後にdefererオブジェクトに問題がないことが判明し、resolveもトリガーされた.
故意にエラーを引き起こした結果、エラー処理はすぐにテストが完了することができ、問題はありません.紆余曲折の末、shouldテストの対象の属性が間違っていることに気づき、rowsではなくdataであるべきで、修正した後、テストはすぐに合格した.
mochaは非同期モードでコードのエラーを捕まえていないように見えます!バグかどうか分かりません.その後、テストコードにtry catchを加えると、エラーが検出されます.
注:後で真剣に考えてみると、確かにmochaの問題ではありません.非同期方法の異常は捕まえられません.nodeの問題とは言えません.これは非同期プログラミング方式の痛みでしょう.
コードが変更されると、エラーメッセージが表示されます.
describe("DbFactory functions",function(){
it("query tables should return more than 0 rows",function(done){
this.timeout(5000);
db.execQuery("show tables").then(function(data){
// , data.data。
data.rows.length.should.greaterThan(0);
done();
},function(err){
done(err);
});
});
});
上記のコードの実行結果は、タイムアウトによるエラーのみです.
4 passing (5s)
1 failing
1) DbFactory DbFactory functions query tables should return more than 0 rows:
Error: timeout of 5000ms exceeded
at null. (/var/node-v0.10.28-linux-x64/lib/node_modules/mocha/lib/runnable.js:158:19)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
timeoutをもっと長く設定しても始まらないし、コマンドはmysqlで即時に返されるので、タイムアウトの問題ではないようです.
テストオブジェクトDbFactoryでqのpromiseオブジェクトが使用されているため、defererオブジェクトがずっとトリガーされていないのではないかと疑い始め、デバッグ後にdefererオブジェクトに問題がないことが判明し、resolveもトリガーされた.
故意にエラーを引き起こした結果、エラー処理はすぐにテストが完了することができ、問題はありません.紆余曲折の末、shouldテストの対象の属性が間違っていることに気づき、rowsではなくdataであるべきで、修正した後、テストはすぐに合格した.
5 passing (184ms)
mochaは非同期モードでコードのエラーを捕まえていないように見えます!バグかどうか分かりません.その後、テストコードにtry catchを加えると、エラーが検出されます.
注:後で真剣に考えてみると、確かにmochaの問題ではありません.非同期方法の異常は捕まえられません.nodeの問題とは言えません.これは非同期プログラミング方式の痛みでしょう.
describe("DbFactory functions",function(){
it("query tables should return more than 0 rows",function(done){
this.timeout(5000);
db.execQuery("show tables").then(function(data){
try{//
data.rows.length.should.greaterThan(0);
done();
}catch(err){done(err);}
},function(err){
done(err);
});
});
});
コードが変更されると、エラーメッセージが表示されます.
4 passing (207ms)
1 failing
1) DbFactory DbFactory functions query tables should return more than 0 rows:
TypeError: Cannot read property 'length' of undefined
at /home/gzg/nodeDev/dzfu/test/dbFactory.test.js:22:26
at _fulfilled (/home/gzg/nodeDev/dzfu/node_modules/q/q.js:794:54)
at self.promiseDispatch.done (/home/gzg/nodeDev/dzfu/node_modules/q/q.js:823:30)
at Promise.promise.promiseDispatch (/home/gzg/nodeDev/dzfu/node_modules/q/q.js:756:13)
at /home/gzg/nodeDev/dzfu/node_modules/q/q.js:564:44
at flush (/home/gzg/nodeDev/dzfu/node_modules/q/q.js:110:17)
at process._tickCallback (node.js:419:13)