首页 > 解决方案 > 如何存根或模拟我正在尝试测试的函数中所需的另一个节点模块

问题描述

我正在尝试测试一个引用自定义节点模块的函数,我需要模拟/存根,因为它不是节点原生的。

该模块称为 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 不是函数

如果有人可以发布应该如何设置测试,那就太好了。

标签: node.jsmocha.jssinon

解决方案


推荐阅读