2017-04-13 4 views
0

MongoDB 백엔드 코드에 최신 ecmascript 구문을 사용하여 jest 테스트를 배우고 있습니다. 빈 콜렉션에서 문서를 찾으려고하면 테스트가 실패할지 지금 테스트하고 있습니다.nodejs async/try/catch jest 테스트가 통과해서는 안되는 경우

아무것도 반환하지 않으며, 그 커서가 falsey 의미,하지만 난 truthy 기대하는 그에게 내가 모를 때 여전히 아래의 테스트도 통과하기 때문에 커서가 결과로 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 블록을 사용해서는 안된다는 것을 읽었다. 그러나 이것이 비동기/오류 대기를 처리하는 데 사용됩니다.

답변

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() 
    } 
});