ユニットテスト用にデータベースをシードしようとしています。
以下は_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))
を返すだけで十分だと思いましたか?私は何を間違えていますか?
なぜなら(done)
は、関数を呼び出す代わりに、実際に関数を返します。 done
を呼び出すには、このように記述する必要があります。
.then(() => done())
ただし、done
をpromiseと一緒に使用することはお勧めしません。約束を返すだけで、mocha
が自動的に処理します。
const saveUsersToDB = () => db.User.bulkCreate(users)
デフォルトでは、mochaテストのタイムアウトは2秒です(つまり、テストは2秒で完了する必要があります)。
次のように(ミリ秒単位で)増やすことができます。
this.timeout(5000); // this test can take up to 5 seconds
同じ問題がありました。このエラーは2秒のタイムアウトが原因で発生するため、テストでddbbに接続する必要がある場合は、ほとんどの場合それを上回る可能性があります。
私がやったのは、外部リソースへの接続を必要とするすべてのテストを統合テストフォルダーに分割し、次のフラグをpackage.json
テストスクリプト:
"int-test": "mocha --timeout 15000 tests/integration/**/*.test.js --compilers js:babel-register "
タイムアウトを増やす他の方法については、次のリンクを参照してください。 mocha timout