2017-04-13 10 views
0

MongoDBバックエンドコードの最新のecmascript構文を使用してテストを勉強しています。空のコレクションから文書を見つけようとすると、テストが失敗するかどうかを今すぐテストしています。nodejs async/try/catch jestテストが合格しないときに渡す

何も返さないので、カーソルが結果としてnullであるべきであり、それはカーソルがfalseyであることを意味するが、私はtruthy期待することを教え、私はなぜ知らない場合は、下記の試験はまださえ渡し:

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ブロックを使用しないでください。しかし、それはあなたが非同期/エラーを待つために使用するものです。

答えて

5

コールバックは約束を返すものではないため、async関数をコールバックとして使用しないでください。その結果は無視されます(拒否は処理されません)。あなたは約束をどのように処理するかをJestが知っていると仮定して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() 
    } 
}); 
関連する問題