我有一个问题,想知道如何为我的一些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 创建一个存根,为我的回调函数创建一个存根。但是代码覆盖率并没有覆盖条件逻辑中的内部语句,因为我的回调只是一个存根。如果我把回调模拟到接近实际代码的东西,代码覆盖仍然不关心。
我的总体问题是,我做错了吗?这是不好的代码设计?在这样的情况下是否有任何标准模式可以遵循?
非常感谢我能得到的任何帮助。 提前谢谢。