web-dev-qa-db-ja.com

Mocha:2000msのエラータイムアウトを超えました

ユニットテスト用にデータベースをシードしようとしています。

以下は_seed.js_ファイルです。

_.......
const app = require('./app')
const db = app.get('db')

const saveUsersToDB = (done) => {
    db.User.bulkCreate(users)
         .then(() => (done))
}

module.exports = {saveUsersToDB};
_

私の_app.test.js_ファイル:

_.......
const expect = require('expect')
const request = require('supertest')
const {saveUsersToDB} = require('./seed/seed');

before(saveUsersToDB)
_

以下のテストを実行すると、エラーが発生します:

_Express listening on port 3000!
  1) "before all" hook: saveUsersToDB

  0 passing (2s)
  1 failing

  1)  "before all" hook: saveUsersToDB:
     Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

npm ERR! Test failed.  See above for more details.
_

.then(() => (done))を返すだけで十分だと思いましたか?私は何を間違えていますか?

10
user1107173

なぜなら(done)は、関数を呼び出す代わりに、実際に関数を返します。 doneを呼び出すには、このように記述する必要があります。

.then(() => done())

ただし、doneをpromiseと一緒に使用することはお勧めしません。約束を返すだけで、mochaが自動的に処理します。

const saveUsersToDB = () => db.User.bulkCreate(users)
12
Lewis

デフォルトでは、mochaテストのタイムアウトは2秒です(つまり、テストは2秒で完了する必要があります)。

次のように(ミリ秒単位で)増やすことができます。

this.timeout(5000); // this test can take up to 5 seconds

https://mochajs.org/#timeouts

17
Kalman

同じ問題がありました。このエラーは2秒のタイムアウトが原因で発生するため、テストでddbbに接続する必要がある場合は、ほとんどの場合それを上回る可能性があります。

私がやったのは、外部リソースへの接続を必要とするすべてのテストを統合テストフォルダーに分割し、次のフラグをpackage.jsonテストスクリプト:

"int-test": "mocha --timeout 15000 tests/integration/**/*.test.js --compilers js:babel-register "

タイムアウトを増やす他の方法については、次のリンクを参照してください。 mocha timout

5
sendra