如何存根内部函数并设置变量值
How to stub an inner function and set a variable value
这是我遇到过的较为复杂的场景之一。我有一个需要测试的函数,这个函数嵌套在一个复杂的函数拼图中。我需要存根这个函数,并在variable
里面设置一个值。
由于我不允许在这里分享的原因,publishEvent()
方法中的变量在测试期间未定义 运行,我需要一种方法来在测试期间设置该变量的值命令我测试函数中的 if 代码块。
我总结了整个文件,因为由于 NDA,我不能在这里分享代码,如果问题不够详细,抱歉。也许使用 sinon 我可以直接在 publishEvent
函数中设置这个变量的值。
function emitEvent() {
async function publishEvent() {
const variable = library.fetchData()
if (variable) {
// do something
}
}
return Promise.resolve(publishEvent())
.then(() => { })
.catch(() => null);
}
function requestSuscription() {
return getAllSubscriptions()
.then((results) => {
return Promise.map(results, () => emitEvent())
})
}
function getAllSubscriptions() {
return new Promise()
}
function requestOtherSubscription() {
console.log('other thing requested')
}
module.exports = { requestSuscription, requestOtherSubscription }
我知道我可以存入 requestSuscription
、requestOtherSubscription
函数并且它有效,但我如何存根 publishEvent
并设置变量值?
您需要一种控制 library.fetchData()
输出内容的方法。要么你需要一种 for that library (easiest option) or you need to employ a link seam 的方式(依赖于环境,需要额外的库)——在模块加载级别用一个假的库替换库。
您可以查看这个 SO answer 到一个几乎相同的问题以了解详细信息。
这是我遇到过的较为复杂的场景之一。我有一个需要测试的函数,这个函数嵌套在一个复杂的函数拼图中。我需要存根这个函数,并在variable
里面设置一个值。
由于我不允许在这里分享的原因,publishEvent()
方法中的变量在测试期间未定义 运行,我需要一种方法来在测试期间设置该变量的值命令我测试函数中的 if 代码块。
我总结了整个文件,因为由于 NDA,我不能在这里分享代码,如果问题不够详细,抱歉。也许使用 sinon 我可以直接在 publishEvent
函数中设置这个变量的值。
function emitEvent() {
async function publishEvent() {
const variable = library.fetchData()
if (variable) {
// do something
}
}
return Promise.resolve(publishEvent())
.then(() => { })
.catch(() => null);
}
function requestSuscription() {
return getAllSubscriptions()
.then((results) => {
return Promise.map(results, () => emitEvent())
})
}
function getAllSubscriptions() {
return new Promise()
}
function requestOtherSubscription() {
console.log('other thing requested')
}
module.exports = { requestSuscription, requestOtherSubscription }
我知道我可以存入 requestSuscription
、requestOtherSubscription
函数并且它有效,但我如何存根 publishEvent
并设置变量值?
您需要一种控制 library.fetchData()
输出内容的方法。要么你需要一种
您可以查看这个 SO answer 到一个几乎相同的问题以了解详细信息。