使用第三方库对Javascript代码进行单元测试

时间:2017-09-26 17:41:47

标签: javascript unit-testing sinon ava

我有一个问题,想知道如何为我的一些JS代码提供代码覆盖,其中一个函数在其中调用第三方函数,该函数将回调作为参数:

  function handleAuthentication () {
    let path = auth.parseHash(window.location.hash, (err, authResult) => {
      if (authResult && authResult.accessToken && authResult.idToken) {
        // console.log('first it goes in here for new session')
        // pop toaster when use logs in
        logger.popToaster({
          title: 'Welcome!',
          desc: 'This is STRAP'
        }, 'success')

        setSession(authResult)
        return '/home'
      } else {
        // console.log('OR it goes in here for new session')
        if (err) {
          console.log('but never here!')
          // pop toaster if something goes wrong during login
          logger.popToaster({
            title: 'Something Went Wrong!',
            desc: `Error: ${err.error}. Check the console for further details.`
          }, 'error')

          console.log(`Error: ${err.error}. Check the console for further details.`)
        }

        return '/login'
      }
    })

    return path
  }

我使用AVA和Sinon进行单元测试,使用Auth0进行身份验证。下面的 auth.parseHash 函数调用是对auth0.js库函数的调用,该函数接受自定义回调。但是对于我的生活,我无法弄清楚如何以覆盖我下面所有代码的方式存根。例如,我可以为 auth.parseHash 创建一个存根,为我的回调函数创建一个存根。但是代码覆盖率并没有覆盖条件逻辑中的内部语句,因为我的回调只是一个存根。如果我把回调模拟到接近实际代码的东西,代码覆盖仍然不关心。

我的总体问题是,我做错了吗?这是不好的代码设计?在这样的情况下是否有任何标准模式可以遵循?

非常感谢我能得到的任何帮助。 提前谢谢。

0 个答案:

没有答案