【发布时间】:2022-02-10 11:35:45
【问题描述】:
我如何正确地测试可以是不同类型的相同承诺响应?
例如,当从 Cloud Firestore 数据库中获取项目集合时,响应位于数组类型中,但有一种方法可以与响应在对象类型中进行交互。代码如下:
// ...
await Database.collection('products').select('published').get().then(snapshot => {
snapshot.forEach(doc => { // <---- HERE snapshot IS AN ARRAY
if (doc.data().published) {
// ...
}
})
console.log(snapshot.docs.length) // <---- HERE snapshot IS AN OBJECT. HOW ?
console.log(snapshot.size) // IT'S THE SAME AS snapshot.docs.length
})
// ...
我试图通过在每次调用后返回一个不同的值来测试它,但它现在可以工作了,我收到一个错误: TypeError: Cannot read property 'length' of undefined:
jest.doMock('@google-cloud/firestore', () => class {
constructor () {
this.collection = jest.fn().mockImplementation((collectionName) => {
if (collectionName === 'products') {
return {
select: () => ({
get: jest.fn().mockResolvedValueOnce([ // <--- AN ARRAY
{
data: () => {
return {
published: false
}
}
}
]).mockResolvedValueOnce({ // <---- AN OBJECT
docs: () => []
})
}),
limit: () => ({ get: async () => ({ empty: true }) })
}
}
})
}
})
这里有什么问题?在所有这些嘲笑中我应该使用什么?:
mockImplementationmockImplementationOncemockResolvedValuemockResolvedValueOncemockReturnValuemockReturnValueOnce
【问题讨论】:
标签: node.js unit-testing google-cloud-firestore jestjs