gpt4 book ai didi

javascript - 强制产生的函数出错以进行单元测试

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:41:26 24 4
gpt4 key购买 nike

我正在尝试对这个 Koa 中间件进行单元测试:

function * onError(next) {
try {
yield next
} catch (err) {
this.status = 500
this.body = err.message
}
}

我想触发 catch block ,但我似乎无法让 yield next 导致错误。

如果这是一个非生成器方法,我会这样做:

function method (next) {
try {
next()
} catch(err) {
this.xxx = 'Error = ' + err.message
}
}

function next() {
throw new Error('Boom!')
}

const context = {}

method.bind(context)(next)

console.log("Expect context to contain xxx with error message")
console.log(context.xxx)

回到生成器函数,因为 next 没有被调用(它被 yield to),所以 catch 没有进入。

我可以访问 next,但调用它是不够的,它会在 try 之外抛出错误:

function next() {
throw new Error('Boom?')
}

const iter = onError(next)

const yielded = iter.next() // Moves the generator to the first, and only, yield

console.log(yielded.value) // Our next

yielded.value() // Error is thrown here, not in the generator.

所以,我要回答的问题是,我可以强制执行 catch block ,从而测试我的错误处理吗?

如果有什么不清楚的,请在评论中提问。谢谢。

最佳答案

您需要将错误传回生成器,例如

try {
yielded.value();
} catch (e){
iter.throw(e);
}

在生成器上调用 .throw 将导致从当前挂起的 yield 语句中抛出一个值。

关于javascript - 强制产生的函数出错以进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37724754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com