gpt4 book ai didi

javascript - 如何使用 Mocha 测试嵌套的 ES6 生成器?

转载 作者:行者123 更新时间:2023-11-29 21:34:19 24 4
gpt4 key购买 nike

我正在尝试使用 co-mocha 来测试我的 koa 应用程序中的一些嵌套生成器功能。该类在运行时运行良好,但当我尝试测试该功能时,我无法让嵌套生成器在我的测试中运行。

正在测试的类:

import Promise from 'bluebird'

class FooService {
_doAsync(){
return new Promise((resolve) => {
setTimeout(() => {
resolve({
foo: 'FOO'
})
}, 500)
})
}

create(){
console.log('This never gets logged')
let self = this
return function*(){
console.log(`This doesn't either`)
return yield self._doAsync()
}
}
}
export default new FooService()

测试文件

import fooService '../services/foo-service'
import Chai from 'chai'
let expect = Chai.expect

describe('Testing generators', () => {
it('Should just work', function *(){
console.log('This log never happens')
let result = yield fooService.create()
expect(result).to.equal({foo: 'FOO'})
})
})

我正在使用 --require co-mocha 和 Node 4.2.6 运行 mocha

虽然测试完成时没有错误,但上面的控制台没有一个被记录下来,所以我很确定实际的测试生成器根本没有运行。

如果我尝试使用 npm 包,mocha-generators,当我从测试生成器中获取日志时,底层生成器从 create() 返回服务上的方法永远不会触发...

我做错了什么??

最佳答案

如果没有 mocha-generatorsit 回调会返回一个不会被任何人运行的生成器。您需要手动将其包装在 co 中,以便 mocha 收到 promise 。

使用 mocha-generators,您的生成器会被执行,但会产生一个生成器函数。这不是预期的,你应该做出 promise 。您需要自己调用 create() 调用返回的生成器函数,然后您不应该 yield 生成器本身,而是通过 yield* 委托(delegate)给它:

let result = yield* fooService.create()();

关于javascript - 如何使用 Mocha 测试嵌套的 ES6 生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35280756/

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