我正在尝试使用 Jest 测试几个数据库实现。为了帮助测试这些实现,我首先针对两个实现都预期实现的 API 提出了一组单元测试。
我目前正在努力将这两个实现传递给测试套件。
下面是最简单形式的(虚拟)MongoDB 实现:
class MongoDB {
async query () {
console.warn(`This is a dummy function.`)
}
async connect () {
// The real connect takes some time..instead we just simulate it
await new Promise((resolve, reject) => {
setTimeout(resolve, 300)
})
}
}
这是我的测试的一小段:
let db
beforeAll(async () => {
db = new MongoDB()
await db.connect()
console.log(`mongoDB ready`)
})
async function testDB (db) {
describe('Basic', async () => {
test('Valid instance', async () => {
expect(db).toBeTruthy()
expect(db.query).toBeTruthy()
})
})
}
describe('Tests', async () => {
console.log(`Running testDB`)
testDB(db) // Have also unsuccessfully tried changing this to: return testDB(db)
})
我使用这种方法的目标是将所有测试包装在testDB
函数并简单地用各种实现来调用它。例如,testDB(new MongoDB())
and testDB(new MemoryDB())
等等。
然而,这似乎并没有按预期工作。
上面的代码会产生一个错误,指出:
● Tests › Basic › Valid instance
expect(received).toBeTruthy()
Expected value to be truthy, instead received
undefined
的顺序console.log
声明似乎表明测试正在运行before db
已初始化。
console.log mongo.test.js:20
Running testDB
console.log mongo.test.js:7
mongoDB ready
整个示例以及结果输出可以是转载于repl.it https://repl.it/@gurupras/testsuite-runs-before-beforeAll.
如何重用单元测试来测试多个实现,而无需重复测试和维护两个版本?