mongoとのデータのやりとりを検証するために、jestとmongooseを使って単体テストを書きたいと思います。jestユニットテストからmongoに接続しようとしたときのタイムアウト
mongo文書の作成/変更/処理の方法を具体的に検証したいので、ここでmongooseを模倣したくありません。
package.json
がunmockedノードモジュールを残すように構成されています。私の実際の試験で
{
"jest": {
"unmockedModulePathPatterns": [
"node_modules"
]
}
}
を、私はモンゴに接続するの世話をするためにbeforeAll()
フックを設定している:
ここでは出力があります:
/usr/local/bin/node node_modules/jest-cli/bin/jest.js --verbose
Using Jest CLI v0.10.0, jasmine2
FAIL src/lib/controllers/my-controller/__tests__/my-test.js (5.403s)
MyTest
✕ it has some property
MyTest › it has some property
- Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
at Timer.listOnTimeout (timers.js:92:15)
1 test failed, 0 tests passed (1 total in 1 test suite, run time 5.903s)
Process finished with exit code 1
毎回のテストタイムアウトは原因done()
がbeforeAll()
フックで呼び出されることはありません。エラーはスローされず、コンソールには何も出力されません。 beforeAll()
フックにブレークポイントを配置して、コードが実行されていることを確認できます。 Mongooseとの接続を開こうとしている間にMongooseがぶら下がっているようで、Jestテストがタイムアウトしているようです。
jest環境の外で同様のコードを実行しているとき、期待通りに接続します(即座に近くにあります)。それが問題を引き起こす可能性があると疑い、私はjestのautomock機能を完全に無効にすることを実験しましたが、動作は変更されません。
私は何か信じられないほど明白なものを見逃してしまったと想像しています...何が起こっている可能性がありますか? 。。
- 冗談-CLI V 0.10.0
- マングースのV 4.4.11
更新:
- は、プレーン
function(done) {}
でES6矢印関数の構文を交換しようとしました。変わりはない。 done
パラメータを渡してテストを非同期化し、テスト完了時に呼び出すよう試みました。変わりはない。- は
beforeAll()
フックが正常に動作していることを確認するために、すべてのマングース関連のコードをコメントアウトしようとしましたerror
とconnected
イベントハンドラ - の宣言の後
mongoose.connect()
を呼び出してみました - それはあります。
ビットがありますが、代わりにES6の矢印構文の(行われる)機能を使用してみたのですか?微妙な違いがあります。 –
あなたは以下を試すことができますか? 'それ( 'いくつかの性質を持っている'、(行って)=> { は//を渡す必要がありますが、実際に を実行することは決してありません(1).toBe(1)を期待する。 済(); });' –
おかげ - 両方の提案を無駄にしようとすると、私の説明に追加されます。 – jayp