我正在尝试使用Jest测试几个数据库实现。为了帮助测试这些实现,我首先想出了一组针对API的单元测试,这些实现都应该实现该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())
和testDB(new MemoryDB())
等。
然而,这似乎没有按预期工作。 上述代码会导致以下错误:
● Tests › Basic › Valid instance
expect(received).toBeTruthy()
Expected value to be truthy, instead received
undefined
console.log
语句的顺序似乎表明测试在db
初始化之前运行。
console.log mongo.test.js:20
Running testDB
console.log mongo.test.js:7
mongoDB ready
整个示例以及生成的输出结果可以在 repl.it 上复制。
如何重复使用单元测试来测试多个实现,而不必重复编写测试并维护两个版本?
jest
中运行得非常好,但是当我们尝试在playwright-test
中使用此方法进行测试注释(skip、slow 等)时,它会挂起。 - rdrwtest.skip('应根据实现使用', () => {});
。 - thejhh