使用“return”和“yield”对生成器进行单元测试
Unit testing generators with `return` and `yield`
给定这个函数
function* backflip(query) {
return yield 123;
}
还有这个测试
describe('backflip', () =>
it('should do that ^', () =>
let handlerInstance = handler();
expect(handlerInstance.next().value).to.equal(123);
expect(handlerInstance.next().done).to.equal(true);
);
);
伊斯坦布尔,应该说所有分支都被覆盖了,但实际上这覆盖了 4 个中的 3 个。删除 return
解决了这个问题。
return
和 yield
一起是反模式吗?
- 这是一个错误吗?
对于上下文,Babel 将其编译为
"use strict";
var _marked = [backflip].map(regeneratorRuntime.mark);
function backflip(query) {
return regeneratorRuntime.wrap(function backflip$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return 123;
case 2:
return _context.abrupt("return", _context.sent);
case 3:
case "end":
return _context.stop();
}
}
}, _marked[0], this);
}
来自控制台的快速示例:
var g = function* backflip(query) {
yield 123; return 0;
};
undefined
var a = g();
undefined
a.next()
Object {value: 123, done: false}
a.next()
Object {value: 0, done: true}
a.next()
Object {value: undefined, done: true}
发电机还有 1 个状态。
见
- https://github.com/babel/babel/issues/590
- https://github.com/facebook/regenerator/issues/181
- Babel REPL
这是一个正在解决的错误。该分支目前无法测试。
给定这个函数
function* backflip(query) {
return yield 123;
}
还有这个测试
describe('backflip', () =>
it('should do that ^', () =>
let handlerInstance = handler();
expect(handlerInstance.next().value).to.equal(123);
expect(handlerInstance.next().done).to.equal(true);
);
);
伊斯坦布尔,应该说所有分支都被覆盖了,但实际上这覆盖了 4 个中的 3 个。删除 return
解决了这个问题。
return
和yield
一起是反模式吗?- 这是一个错误吗?
对于上下文,Babel 将其编译为
"use strict";
var _marked = [backflip].map(regeneratorRuntime.mark);
function backflip(query) {
return regeneratorRuntime.wrap(function backflip$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return 123;
case 2:
return _context.abrupt("return", _context.sent);
case 3:
case "end":
return _context.stop();
}
}
}, _marked[0], this);
}
来自控制台的快速示例:
var g = function* backflip(query) {
yield 123; return 0;
};
undefined
var a = g();
undefined
a.next()
Object {value: 123, done: false}
a.next()
Object {value: 0, done: true}
a.next()
Object {value: undefined, done: true}
发电机还有 1 个状态。
见
- https://github.com/babel/babel/issues/590
- https://github.com/facebook/regenerator/issues/181
- Babel REPL
这是一个正在解决的错误。该分支目前无法测试。