【发布时间】:2017-08-16 17:09:06
【问题描述】:
我在尝试为某些中间件编写单元测试时遇到了一些有趣的障碍,因为我似乎无法想出一种可行的方法来伪造一个生成器函数的两个并发连接,这是一个片段koa 中间件。
我有一个构造函数,它接受一些设置选项并返回一个生成器。这个生成器可以通过闭包访问一些变量,每个请求递增,完成时递减。这是代码的子集,可让您了解我要完成的工作。
module.exports = function (options = {}) {
let connections = 0;
let {
max = 100
...
} = options;
return function *() {
connections++
...
if (connections > max) {
connections--;
// callback here
}
...
}
}
简单来说,我希望能够跟踪多个同时“连接”,当满足最大数量的请求时,我会在其中触发回调。但是,在我的测试中,我返回了这个生成器的一个实例,并且只能在模仿单个请求时调用它,因此我永远无法满足 connections > max 条件
it("Should trigger callback when max connections reached", () => {
const gen = middleware({
max: 1,
onMax: function (current, max) {
this.maxReached = true;
}
}).call(context);
gen.next();
expect(context.maxReached).to.be.true;
});
【问题讨论】:
标签: unit-testing concurrency generator middleware koa