MongoDB バックエンド コードの最新の ecmascript 構文を使用して、冗談のテストを学んでいます。空のコレクションからドキュメントを見つけようとすると、テストが失敗するかどうかを確認するために、今テストしています。
null
何も返されないため、カーソルは結果として存在する必要があります。つまり、カーソルは偽ですが、真であることを期待するように指示しても、以下のテストはパスしますが、その理由はわかりません。
import config from './config'
const mongodb = require('mongodb')
it('sample test', () => {
mongodb.MongoClient.connect(config.mongodb.url, async (connectErr, db) => {
expect(db).toBeTruthy()
let cursor
try {
cursor = await db.collection('my_collection').findOne()
// cursor is null, but test still passes below
expect(cursor).toBeTruthy()
} catch (findErr) {
db.close()
}
})
})
また、これは良いテスト テスト スタイルですか? テストで try/catch ブロックを使用すべきではないとどこかで読みました。しかし、それは非同期/待機エラーを処理するために使用するものです。
async
関数をコールバックとして使用しないでください- コールバックは promise を返すことを想定していないためです。結果は無視されます (拒否は処理されません)。Jest が promise の処理方法を知っていると仮定して、async
関数をit
それ自体に渡す必要があります。
it('sample test', async () => {
const db = await mongodb.MongoClient.connect(config.mongodb.url);
expect(db).toBeTruthy();
try {
const cursor = await db.collection('my_collection').findOne();
expect(cursor).toBeTruthy();
} finally { // don't `catch` exceptions you want to bubble
db.close()
}
});
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加