如何使用 Mocha 测试嵌套的 ES6 生成器?
How Do I Test nested ES6 Generators using Mocha?
我正在尝试使用 co-mocha
来测试我的 koa
应用程序中的一些嵌套生成器功能。 class 在 运行 时工作得很好,但是当我尝试测试功能时,我无法在我的测试中将嵌套生成器设置为 运行。
Class 正在测试中:
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
虽然测试完成 w/o 错误,但上面的控制台的 NONE 会被记录下来,所以我很确定实际的测试生成器根本不会 运行ning。
如果我尝试使用 npm 包,mocha-generators
而不是,当我从测试生成器内部获取日志时,从服务上的 create()
方法返回的底层生成器永远不会触发。 .
我做错了什么??
没有 mocha-generators
,it
回调 returns 一个不会被任何人 运行 的生成器。您需要手动将其包装在 co
中,以便 mocha 收到承诺。
使用 mocha-generators
,你的生成器被执行但产生了一个生成器函数。这不是预期的,你应该做出承诺。您需要自己调用 create()
调用 returns 的生成器函数,然后您不应该 yield
生成器本身,而是通过 yield*
:
let result = yield* fooService.create()();
我正在尝试使用 co-mocha
来测试我的 koa
应用程序中的一些嵌套生成器功能。 class 在 运行 时工作得很好,但是当我尝试测试功能时,我无法在我的测试中将嵌套生成器设置为 运行。
Class 正在测试中:
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
虽然测试完成 w/o 错误,但上面的控制台的 NONE 会被记录下来,所以我很确定实际的测试生成器根本不会 运行ning。
如果我尝试使用 npm 包,mocha-generators
而不是,当我从测试生成器内部获取日志时,从服务上的 create()
方法返回的底层生成器永远不会触发。 .
我做错了什么??
没有 mocha-generators
,it
回调 returns 一个不会被任何人 运行 的生成器。您需要手动将其包装在 co
中,以便 mocha 收到承诺。
使用 mocha-generators
,你的生成器被执行但产生了一个生成器函数。这不是预期的,你应该做出承诺。您需要自己调用 create()
调用 returns 的生成器函数,然后您不应该 yield
生成器本身,而是通过 yield*
:
let result = yield* fooService.create()();