テストスイート全体を実行すると、次のエラーが発生します。
timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
StackOverflow http://stackoverflow.com/questions/16607039/in-mocha-testing-while-calling-asynchronous-function-how-to-avoid-the-timeout-er#とここhttps:でこの非常に便利な応答を見つけました
ただし、HTTPとpromiseを処理するテストですべてのオカレンスを削除した後でも、問題は解決しません。 私が今持っているのはAngularディレクティブとコントローラーの仕様だけで、テンプレートデータ、ディレクティブ、コントローラーロジックをチェックする以外はあまり機能していないようです。
なぜこれがまだ起こっているのか、そして問題が何であるかを正確に知るためのより良い方法があるかどうか誰かが知っていますか? ありがとう!
@gumatiasは、テストを設定するために必要な支援をさらに提供します
フィードバックをありがとう@boneskull !
現在、約700以上の仕様があり、それらはすべてプロプライエタリコードです。 2つの類似したサンプルのいずれかを提供できますが、それは役に立ちますか?
以下は私が現在package.jsonに持っているものです。 mochaやkarma-mochaなどのライブラリのアップグレードは役に立たなかったようです。
"devDependencies": {
"karma": "~0.12.30",
"karma-chai-jquery": "~1.0.0",
"karma-chrome-launcher": "~0.1",
"karma-coffee-preprocessor": "~0.1.3",
"karma-firefox-launcher": "~0.1",
"karma-jquery": "~0.1.0",
"karma-mocha": "0.2.0",
"karma-sinon-chai": "~0.1.1",
"karma-spec-reporter": "~0.0.10",
"mocha": "^2.2.5"
}
以下は、タイムアウトが発生しなくなる(成功しない)状態に到達するための私の試みの一部です。
1.テストでの各promiseおよびasync呼び出し内および後にdone()
呼び出します
2.非同期呼び出し、promise、httpBackend、およびタイムアウトを処理するすべての仕様を削除しました(念のため)
3. package.json
ほとんどのライブラリをアップグレードしました:
"devDependencies": {
"karma": "~0.12.30",
"karma-chai-jquery": "1.0.0",
"karma-chrome-launcher": "0.2.2",
"karma-coffee-preprocessor": "0.3.0",
"karma-firefox-launcher": "~0.1",
"karma-jquery": "0.1.0",
"karma-mocha": "0.2.1",
"karma-sinon-chai": "1.1.0",
"karma-spec-reporter": "0.0.23",
"mocha": "2.3.4"
}
4.カルマスペックレポーターが遅いと不平を言っていたスペックを削除しました:
例: Chrome 39.0.2171 (Mac OS X 10.11.2) SLOW 2.457 secs: My Spec Name "before each" hook for "should display " Add My Spec" when doing something"
他の新しいスペックが遅いと不平を言っていたことが判明しました。 これはおそらく、根本的な原因を実際に見つけることなく仕様を削除することにつながる可能性があります。
この問題を解決します。 https://github.com/mochajs/mocha/issues/2030で説明されているメモリリークの問題であることが判明しました
テスト固有のタイムアウトを適用することも、this.timeout(0)を使用してタイムアウトをすべて無効にすることもできます。
it('should take less than 500ms', function(done){
this.timeout(500);
setTimeout(done, 300);
});
ソース: https :
Emberを使用している場合は、Ember.runで非同期呼び出しをラップしてみてください=>これを読んでください
同じ問題が発生し、Ember.run =>で修正されました。
また、矢印は太い矢印である必要があることを忘れないでください(=>の代わりに->を使用したときにその間違いを犯しました)これはjavascriptスコープが原因です。興味がある場合はそれを読んでください。
取得しています
エラー:2000msのタイムアウトを超えました。 非同期テストとフックの場合は、「done()」が呼び出されていることを確認してください。 Promiseを返す場合は、それが解決されることを確認してください。
これを修正する方法は?
私のコードは次のとおりです。
describe("Test Search", function() {
it("Test Post Request", function(done) {
chai.request(postReqURL)
.post(postReqURL)
.send(postReqObject)
.end(function (err, res) {
if (err) done(err);
expect(res.status).to.equal(200);
done()
})
});
});
こんにちは@ vishnu2prasadh 、HTTP APIが応答するのにかかると予想されるよりも長くタイムアウトを増やしてみましたか? テストでのdone
の使用法は正しいようです。
@ScottFreeCodeありがとうございます。 this.timeout(10000);を追加することでエラーが解決されました。 中身
it("Test Post Request", function(done) {
this.timeout(10000);
});
スクリプトの下にpackage.jsonを追加するだけです
"scripts": {
"start": "SET NODE_ENV=dev && node ./bin/www",
"devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
"test": "mocha --timeout 10000" <= increase this from 1000 to 10000
},
その後、あなたはただ実行することができます
npm test
@elvinazeは、beforeEachブロックのタイムアウト制限を増やす方法はありますか?
スクリプトの下にpackage.jsonを追加するだけです
"scripts": { "start": "SET NODE_ENV=dev && node ./bin/www", "devstart": "SET NODE_ENV=dev && nodemon ./bin/www", "test": "mocha --timeout 10000" <= increase this from 1000 to 10000 },
その後、あなたはただ実行することができます
npm test
これまでで最も有用な答え👍
スクリプトの下にpackage.jsonを追加するだけです
"scripts": { "start": "SET NODE_ENV=dev && node ./bin/www", "devstart": "SET NODE_ENV=dev && nodemon ./bin/www", "test": "mocha --timeout 10000" <= increase this from 1000 to 10000 },
その後、あなたはただ実行することができます
npm test
それでも私にとってはなぜ。エラー:10000msのタイムアウトを超えました。 非同期テストとフックの場合は、「done()」が呼び出されていることを確認してください。 Promiseを返す場合は、解決することを確認してください
it( 'ユーザーモジュールにアクセスする必要があります'、function(done){
any_asynchfunction ()。
試す{
assert.strictEqual(check、true、 '管理者ユーザーはユーザーモジュールにアクセスできます');
終わり();
} catch(err){
done(err);
}
});
});
var any_asynchfunction = function(){
var deferred = q.defer();
//次のような非同期関数を呼び出します:API呼び出し(http://api.domain.com)
deferred.resolve(res);
deferred.promiseを返します。
}
コールバックとPromiseを使用してMochaで非同期コードをテストする
@ ashish101184 、無関係のクローズされた問題にコメントを追加しないで
あなたの問題はドキュメンテーションで説明されました。
it('should access user module', function() {
return any_asynchfunction()
.then(function(check) {
assert.strictEqual(check, true, 'admin user should have access to user module');
});
});
テスト固有のタイムアウトを適用することも、this.timeout(0)を使用してタイムアウトをすべて無効にすることもできます。
it('should take less than 500ms', function(done){ this.timeout(500); setTimeout(done, 300); });
ソース: https :
こんにちは、これらの行を追加する必要があるファイルのガイドラインに従って、エラー「60000msのタイムアウトを超えました」に直面しているbotiumdirectline3をインストールしました
個々のテスト用に設定したり、 package.json
ファイルに構成を追加したりするのではなく、グローバルタイムアウトを作成することでこれを解決しました。 テストフォルダの下にファイルmocha.opts
を作成しました。 このファイルでは、テストを実行するための適切なタイムアウトスパンを設定しました。
--timeout 10000
私もそのエラーを受け取り、数時間の調査とデバッグの後で、根本的な原因を見つけました。
このテストを検討してください。
const delay = require('delay')
describe('Test', function() {
it('should resolve', async function(done) {
await delay(1000)
})
})
テストを実行すると、次のエラーが発生します。
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
ここで、 done引数が削除された、このわずかに異なるテストについて考えてみます。
const delay = require('delay')
describe('Test', function() {
it('should resolve', async function() {
await delay(1000)
})
})
このテストを実行すると、合格します。
どういうわけか、非同期関数にdone引数が存在すると、使用されていなくても、テストの最後にdone()が呼び出されても、テストが中断さ
スクリプトの下にpackage.jsonを追加するだけです
"scripts": { "start": "SET NODE_ENV=dev && node ./bin/www", "devstart": "SET NODE_ENV=dev && nodemon ./bin/www", "test": "mocha --timeout 10000" <= increase this from 1000 to 10000 },
その後、あなたはただ実行することができます
npm test
「テスト」「スクリプト」に--timeout10000を追加すると、私にとって魅力のように機能しました。
ありがとうございました!
最も参考になるコメント
スクリプトの下にpackage.jsonを追加するだけです
その後、あなたはただ実行することができます