如何使用摩卡测试嵌套的 ES6 生成器
How Do I Test nested ES6 Generators using Mocha?
我正在尝试使用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
和节点 4.2.6 的摩卡
虽然测试在没有错误的情况下完成,但上面的控制台都没有被记录下来,所以我很确定实际的测试生成器根本不运行。
如果我尝试使用 npm 包,mocha-generators
相反,当我从测试生成器内部获取日志时,从服务上的 create()
方法返回的基础生成器永远不会触发......
我做错了什么??
如果没有mocha-generators
,it
回调返回一个不会被任何人运行的生成器。您需要手动将其包装在co
中,以便摩卡收到承诺。
使用 mocha-generators
,您的生成器被执行,但产生一个生成器函数。这是意料之中的,你应该做出承诺。你需要调用create()
调用自己返回的生成器函数,然后你不应该yield
生成器本身,而是通过yield*
委托给它:
let result = yield* fooService.create()();
相关文章:
- 用嵌套函数和默认函数定义函数
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 可以简化嵌套的延迟Q Promises解析吗
- 用于搜索的聚合物嵌套绑定
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- d3中堆栈函数和嵌套函数之间的差异
- 可以合并或嵌套ES6导入
- 嵌套的ES6类
- 如何在 ES6 中嵌套模板字符串
- 如何处理 React 嵌套组件循环依赖?(使用 es6 类)
- 如何使用摩卡测试嵌套的 ES6 生成器
- 使用嵌套类来模拟 ES6 中的命名空间
- 避免在ES6 JavaScript web项目中进行深度嵌套模块导入
- 使用(ES6)计算的属性名称更新嵌套对象
- ES6解构嵌套的可选参数
- 为ES5或ES6中对象的嵌套属性简明定义Getter和Setter
- 解构ES6嵌套对象
- ES6深度嵌套对象解构
- 如何在ES6中导入嵌套对象
- ES6 / lodash -用startsWith检查嵌套对象值