次の簡単なテストセットアップがあります。
test('what did I do to deserve this', async () => {
expect.assertions(1)
const data = await fetchData() // or fetchData2
expect(data).toBe('peanut butter')
})
async function fetchData () {
return "peanut butter"
}
async function fetchData2 () {
return knex.select('name').from('foos')
}
fetchData
を使用すると、jestは問題なく終了します。
しかし、fetchData2
を使用すると、次のように文句を言います。
テストの実行が完了した後、Jestは1秒で終了しませんでした。
これは通常、テストで停止されなかった非同期操作があることを意味します。この問題のトラブルシューティングを行うには、
--detectOpenHandles
を指定してJestを実行することを検討してください。
データ変数にはdbクエリの結果が含まれており、APIの上位にある他の呼び出し元はクエリを適切に解決し、他のステートメントの実行を続行します。
私が試してみました:
--detectOpenHandles
フラグが表示されますが、何も表示されません。fetchData2
の期待パスを作成する ここで説明する問題done
引数をtest
の非同期関数に渡します。それは存在しますが、それを呼び出しても警告は修正されません。これを幸せにするための助けをありがとう。
物事のバージョン:
テストスイートの最後でknex.destroy()
を呼び出して、接続プールを破棄する必要があります。
DB接続ではなくJestを強制的に閉じるには:
--forceExit
したがって、私のテストスクリプトは次のようになりました。
"scripts": {
"test": "jest --forceExit"
}