javascript - 如何使 Jest spOn 第二次调用函数
问题描述
我有嵌套的 Postgres 查询。因此,当我测试时,我希望 Jest.spyOn 以不同的响应解决
const query1 = 'SELECT NOW() as now'
const query2 = 'SELECT * from table1'
return new Promise((resolve, reject) => {
pgClient
.query(query1)
.then(res => {
pgClient
.query(query2)
.then(res => {
resolve(res.rows[0])
})
.catch(e => reject(e.stack))
})
.catch(e => reject(e.stack))
});
所以我的测试看起来像:
jest.spyOn(pgClient, 'query').mockImplementation(() =>
Promise.resolve({ rows: [...] })
);
那么如何在同一个测试中解决 query1 和 query2 不同的响应呢?
解决方案
根据传递给它的参数,您可以mockImplementation
返回不同的响应:
jest.spyOn(pgClient, "query").mockImplementation(query => {
if (query === query1) {
return Promise.resolve({ rows: [1] });
} else if (query === query2) {
return Promise.resolve({ rows: [2] });
}
return Promise.resolve({ rows: [] });
});
推荐阅读
- android - 在 ConstraintLayout 上设置 app:layout_constraintTop_toBottomOf
- android - 如何使用像 22571267 这样的 uiautomator 在真实的 android 设备中验证 xpath
- php - count():参数必须是Yii2中实现Countable的数组或对象
- ios - 双击ios时禁用avplayer中的缩放效果
- css - sass 编译错误说 $color: null is not a color 即使我声明了颜色
- mysql - 如何从 sequelize 中的多级关联中获取结果?
- c# - 使用 windowHandle 显示 WPFHidden 窗口
- angular - 使用 @agm/core 从 angular6 中的服务器获取纬度和经度后加载谷歌地图
- java - 提高 JAX-RS 应用程序的性能
- jsf - PrimeFaces 数据表多次更新