javascript - 带有 jest 的模拟函数,其中包含一个回调作为参数,该参数返回一个承诺
问题描述
我正在与第 3 方脚本集成,并且遇到了一个我不知道如何正确测试的场景。
第 3 方脚本使用一些方法将对象添加到窗口。create 方法的第二个参数是一个回调函数,它返回一个被拒绝或解决的承诺。
我需要能够使用拒绝或已解决状态模拟第二个参数,以便我的单元测试可以涵盖 UI 是否使用错误或成功消息进行更新。
如何以正确的响应模拟此函数和回调函数?
thirdpartyform.create(options, (err, message) => {
return new Promise((resolve, reject) => {
if (err) {
reject(err.reason)
} else {
resolve(message)
}
})
.then(message => {
setState(message)
})
.catch((err) => {
setState(err)
})
})
以下是我当前尝试模拟不起作用的函数(针对窗口对象)。它没有正确设置拒绝值或解析值:(
create: jest.fn((options, callback) => callback(jest.fn().mockRejectedValue(FORM_TIMEOUT)))
Any help would be greatly appreciated
解决方案
create
is callback-based and is unaware of promises, so a mock shouldn't involve promises either.
Given that thirdpartyform.create
is a spy that has been previously set up with jest.mock
, jest.spyOn
, etc, a mock for successful response:
thirdpartyform.create.mockImplementation((options, cb) => cb(null, 'message'))
A mock for unsuccessful response:
thirdpartyform.create.mockImplementation((options, cb) => cb({ reason: 'error' }))
推荐阅读
- python - 在python中计算FWHM
- javascript - 创建一个单例对象以跨不同页面保存数据
- javascript - 未能对存储在 localStorage 中的对象调用构造函数方法
- c# - 如何在不冻结应用程序 xamarin 表单的情况下添加很多孩子
- python - 在本地安装带有 pip3 的 python 包而不是以 root 身份安装 python 包时的 Python coredumps
- python - OpenCV 在我的 macOS 上安装后无法工作。谁能帮我吗?
- c - 覆盖率。配置覆盖率以检查声明的变量在用作指针之前是否已初始化
- scala - Scala Map集合和map方法
- java - JDK可以自动设置吗?
- kubernetes - 将 kubernetes pod 与外部端点(rest services、sql server、kafka、redis 等)通信的问题