Javascript 如何使用Mocha测试嵌套ES6生成器?
我正在尝试使用Javascript 如何使用Mocha测试嵌套ES6生成器?,javascript,mocha.js,ecmascript-6,generator,koa,Javascript,Mocha.js,Ecmascript 6,Generator,Koa,我正在尝试使用co mocha测试我的koa应用程序中的一些嵌套生成器功能。该类在运行时工作正常,但当我尝试测试功能时,无法在测试中运行嵌套生成器 正在测试的类: import Promise from 'bluebird' class FooService { _doAsync(){ return new Promise((resolve) => { setTimeout(() => { resolve({ foo: '
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/——需要co-mocha
和Node 4.2.6
虽然测试完成了w/o错误,但是上面的控制台没有一个被记录下来,所以我很确定实际的测试生成器根本没有运行过
如果我尝试使用npm包,mocha generators
,当我从测试生成器内部获取日志时,从服务上的create()
方法返回的底层生成器永远不会触发
我做错了什么?如果没有
mocha生成器
,it
回调将返回一个任何人都不会运行的生成器。您需要手动将其包装在co
中,这样摩卡就可以收到承诺
使用摩卡生成器
,可以执行生成器,但会生成生成器函数。这是意料之外的,你应该做出承诺。您需要调用create()
调用返回的生成器函数,然后您不应该生成生成器本身,而应该通过以下方式委托给它:
您可能希望yield*fooService.create()()
永远不要导出类实例!要么导出类,要么不要使用class
语法,而是创建一个对象文本。@Bergi当该行所在的生成器运行时,更改该行将如何改变任何事情(在co mocha
的情况下),从未运行过?@Bergi您的线路修改与mocha generators
库一起工作!非常感谢。请添加它作为答案?另一方面,为什么要断言我们不应该“永远”导出类实例?我的印象是,在单例情况下,由于require
的内置缓存?@RavenHursT,这种模式工作得相当好。主要问题是,如果您要导出一个类单例,还不如只导出一个对象。使用类语法将一无所获。您可以同样轻松地导出默认函数create(){}
或者如果您有多个函数,导出函数create(){}
。
let result = yield* fooService.create()();