【发布时间】:2016-05-18 18:31:03
【问题描述】:
我正在尝试使用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() 方法返回的底层生成器永远不会触发......
我做错了什么??
【问题讨论】:
-
你可能想
yield* fooService.create()() -
永远不要导出类实例!要么导出类,要么不使用
class语法而是创建一个对象字面量。 -
@Bergi 当该行所在的生成器一开始似乎从未运行时,更改该行将如何改变任何东西(在
co-mocha的情况下)? -
@Bergi 您的行修改与
mocha-generators库一起使用!谢谢!请添加它作为答案?顺便说一句,为什么我们应该“从不”导出类实例的断言?我的印象是,在单例的情况下,由于require的内置缓存,这种模式工作得很好? -
@RavenHursT 主要问题是,如果您要导出一个类单例,您还不如只导出一个对象。使用类语法你什么也得不到。你可以很容易地
export default function create(){}或者如果你有多个功能,export function create(){}。
标签: javascript mocha.js ecmascript-6 generator koa