node.js - 如何存根或模拟我正在尝试测试的函数中所需的另一个节点模块
问题描述
我正在尝试测试一个引用自定义节点模块的函数,我需要模拟/存根,因为它不是节点原生的。
该模块称为 jwt,我想模拟它并存根 .addOperation 和 .decode 方法,因此我可以测试 if else 块。
这就是功能。
static verifyTokenAndExpiry (jwt, jwk) {
return new Promise(function (resolve, reject) {
let jwtLib = require('jwt')
let decoder = new jwtLib.Decoder(jwt)
decoder.addOperation('verify', jwk)
.addOperation({ validateDataType: false, validateAudience: false, validateExpiration: true, validateNotBefore: true }, 'validate')
.decode(function (error, claims) {
if (error) {
console.error('Failed to decode token, not a valid encoded format or expired: ', error)
reject(error)
} else {
console.trace('Token was decoded and passed expiry check: ', claims)
resolve(true)
}
})
})
}
这是测试的开始。
describe('CommonLib - verifyTokenAndExpiry', () => {
it('Should return true', async () => {
let decoder = {
addOperation: ''
}
mock('jwt', { Decoder: sinon.stub(decoder, 'addOperation').callsFake(function fakeFn () {})
})
// sinon.stub(decoder,"addOperation").callsFake(function fakeFn () {})
let response = await CommonLib.verifyTokenAndExpiry('', '')
})
})
这是我目前得到的错误。
TypeError:decoder.addOperation 不是函数
如果有人可以发布应该如何设置测试,那就太好了。
解决方案
推荐阅读
- javascript - 如何获取具有 OneToMany 关系的对象列表
- visual-studio - 如何将 Eclipse C++ 项目导入 Visual Studio 2019?
- c - 一元运算符的优先级是否高于强制转换表达式?
- python - 使用哪种方法将使用 cv2 读取的图像转换为字节?tostring() 还是 io.BytesIO?
- javascript - 如何在 JavaScript 中用另一个对象更新一个对象
- c++ - 连接被拒绝 ESP32
- c# - 如何检查文件是否已复制到输出目录,因为它比以前更新?
- javascript - 图标的 TouchableOpacity 和 onPress
- javascript - 如何知道节点进程的cpu利用率?
- c# - 是否有可能在反序列化时以某种方式捕获与任何 POCO 属性不匹配的 JSON 数据的其余部分?