Vue.js 如何在try/catch的catch块中测试函数?

Vue.js 如何在try/catch的catch块中测试函数?,vue.js,jestjs,vue-test-utils,Vue.js,Jestjs,Vue Test Utils,我有一个自定义包,如果try/catch的catch块中抛出错误,就会调用该包。我想测试是否调用了logFunction.error函数。如何在catch块中测试此函数?我要通过一个模拟jwt。我正在使用jwtDcode()来解码我的jwt。如果失败,将抛出一个错误,logFunction.error()将返回一个details对象。这是设置此单元测试的正确方法吗 file.js jwtFunction ({commit}, idToken) { try { jwtDecode(idTo

我有一个自定义包,如果try/catch的catch块中抛出错误,就会调用该包。我想测试是否调用了logFunction.error函数。如何在catch块中测试此函数?我要通过一个模拟jwt。我正在使用jwtDcode()来解码我的jwt。如果失败,将抛出一个错误,logFunction.error()将返回一个details对象。这是设置此单元测试的正确方法吗

file.js

jwtFunction ({commit}, idToken) {
 try {
   jwtDecode(idToken)
   // do some logic
 }catch (error) {
    logFunction.error({
      details: {
        event: 'invalid jwt'
        message: `${error.message} of ${idToken}`
        timeStamp: Date.now()
      }
   })
  commit(types.setApplicationError, error)
}
it('[positive] should commit application error if jwt fails to decode', () => {
        const mockIdToken = {}
        const spy = jest.spyOn(logFunction, 'error')

        actions.jwtFunction({ commit }, mockIdToken)
        expect(spy).toHaveBeenCalled()
      }) 
file.spec.js

jwtFunction ({commit}, idToken) {
 try {
   jwtDecode(idToken)
   // do some logic
 }catch (error) {
    logFunction.error({
      details: {
        event: 'invalid jwt'
        message: `${error.message} of ${idToken}`
        timeStamp: Date.now()
      }
   })
  commit(types.setApplicationError, error)
}
it('[positive] should commit application error if jwt fails to decode', () => {
        const mockIdToken = {}
        const spy = jest.spyOn(logFunction, 'error')

        actions.jwtFunction({ commit }, mockIdToken)
        expect(spy).toHaveBeenCalled()
      }) 

您是否正在尝试测试第三方软件包在输入错误时是否正确抛出错误?我个人认为对你的单元测试来说可能太多了。我建议直接测试您直接控制的代码,即
logFunction.error
。如果你想测试
jwtFunction
的分支,你可以模拟
jwtDecode
函数,让它显式返回一个错误,而不是依赖包本身来返回错误。好吧,我想我在正确的轨道上监视
logFunction.error()
。我理解你只测试你控制的代码的意思。是的,我想测试jwtDecode。通过模仿jwtDecode函数,我不能使用spyOn,我该怎么做呢
const jwtDecode=jest.fn()
?此页面可能会帮助您尝试测试第三方软件包在输入错误时是否正确抛出错误?我个人认为对你的单元测试来说可能太多了。我建议直接测试您直接控制的代码,即
logFunction.error
。如果你想测试
jwtFunction
的分支,你可以模拟
jwtDecode
函数,让它显式返回一个错误,而不是依赖包本身来返回错误。好吧,我想我在正确的轨道上监视
logFunction.error()
。我理解你只测试你控制的代码的意思。是的,我想测试jwtDecode。通过模仿jwtDecode函数,我不能使用spyOn,我该怎么做呢
const jwtDecode=jest.fn()
?此页面可能会对您有所帮助