我正在尝试使用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'})
})
})
我正在运行mocha w / --require co-mocha
和Node 4.2.6
虽然测试完成没有错误,但上面的控制台没有记录,所以我很确定实际的测试生成器根本不会运行。
如果我尝试使用npm包,mocha-generators
,当我从测试生成器内部获取日志时,从服务上的create()
方法返回的基础生成器永远不会触发... < / p>
我做错了什么?
答案 0 :(得分:2)
如果没有mocha-generators
,it
回调将返回一个不会被任何人运行的生成器。您需要手动将其包装在co
中,以便mocha能够收到承诺。
使用mocha-generators
,您的生成器将被执行,但会产生生成器函数。这不是预期的,你应该产生承诺。您需要调用create()
调用自己返回的生成器函数,然后您不应yield
生成器本身,而应通过yield*
委托给它:
let result = yield* fooService.create()();