nodejs async/await try/catch 开玩笑的测试在不应该通过的时候通过了
nodejs async/await try/catch jest test passing when it shouldn't
我正在学习使用最新的 ecmascript 语法对我的 MongoDB 后端代码进行开玩笑测试。我现在正在测试,看看如果我尝试从空集合中查找文档,测试是否会失败。
结果光标应该是 null
,因为什么都没有 returns,这意味着光标是假的,但是下面的测试仍然通过,即使我告诉它期望真实但我没有不知道为什么:
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/await 错误的方法。
不要使用 async
函数作为回调 - 因为回调不应该 return 承诺;他们的结果将被忽略(并且不会处理拒绝)。您应该将 async
函数传递给 it
本身,假设 Jest 知道如何处理承诺。
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()
}
});
我正在学习使用最新的 ecmascript 语法对我的 MongoDB 后端代码进行开玩笑测试。我现在正在测试,看看如果我尝试从空集合中查找文档,测试是否会失败。
结果光标应该是 null
,因为什么都没有 returns,这意味着光标是假的,但是下面的测试仍然通过,即使我告诉它期望真实但我没有不知道为什么:
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/await 错误的方法。
不要使用 async
函数作为回调 - 因为回调不应该 return 承诺;他们的结果将被忽略(并且不会处理拒绝)。您应该将 async
函数传递给 it
本身,假设 Jest 知道如何处理承诺。
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()
}
});