javascript - 如何在 Jest 中模拟 Firestore .collection?
问题描述
我有以下代码Menu.js
当我在测试文件中模拟它时,我仍然有一个错误,TypeError: Cannot read property 'collection' of undefined
到目前为止我尝试使用下面列出的 2 个模拟,但没有成功。我想对 2 个场景进行简单测试,一个有正确的 firestore 响应,一个有错误。但是,我目前一直在嘲笑 Firestore。
useEffect(() => {
db.collection('menu').onSnapshot(
{ includeMetadataChanges: true },
(snapshot) => snapshot
)
try {
getCollection('menu').then((snapshot) => {
const data = getData(snapshot)
const menu = formatMenu(data)
setAppetizers(menu.Appetizers)
setDesserts(menu.Desserts)
setSalads(menu.Salads)
setMaindishes(menu.Mains)
handleLoading(false)
})
} catch (err) {
handleLoading(false)
handleError(err)
notify(DB_ERROR_MSG)
console.log(error)
}
}, [])
Menu.test.js 文件,其中包含 2 个失败的模拟。
jest.mock('../../firebase', () => {
firebase: {
db: jest.fn().mockReturnValue({
ref: jest.fn().mockReturnThis(),
on: jest.fn((eventType, callback) => callback()),
update: jest.fn(() => Promise.resolve()),
remove: jest.fn(() => Promise.resolve()),
once: jest.fn(() => Promise.resolve()),
collection: jest.fn(() => Promise.resolve())
})
}
})
jest.mock('../../firebase', () => {
firebase: {
db: {
collection: jest.fn(() => Promise.resolve())
}
}
})
test('Should render Menu component', () => {
const { container } = renderWithRouter(<Menu />)
const text = 'Menu'
expect(container.innerHTML).toMatch(text)
})
解决方案
推荐阅读
- jquery - 具有组合属性的 jQuery slideTo
- c# - 在 Microsoft Dynamics 365 的营销列表中执行插件
- java - 将 XML 转换为数据集
- c# - 赛马林。无法正确实现 AudioManager AudioFocus 活动和侦听器
- ionic-framework - 事件提供程序正在弃用。在 ionic 应用程序中使用 Redux 或 Observables 获取状态
- python - 使用 seaborn 的 pandas 图中的间距时间戳
- python - Python itertools 无重复排列
- android - 即使 offsetlimit 是默认值(0),ViewPager2 也会预加载下一个片段
- python - 使用 requests 和 BS4 检查特定产品的每种尺寸的库存
- mysql - Laravel 查询加入多对多唯一结果