作为将旧应用程序从 ExpressJs 迁移到 Koa JS (v1) 的一部分。我编写了一个中间件来处理发生的任何错误。它看起来像这样:
module.errors = function * (next) {
try {
yield next;
} catch (err) {
switch(err && err.message) {
case: 'Bad Request':
this.status = 400;
this.body = {message: 'Bad Request'};
brea;
default:
this.status = 500;
this.body = {message: 'An error has occurred'};
}
this.app.emit('error', err, this);
}
}
它像这样包含在我的应用程序中:
const app = require('koa')();
const router = require('koa-router');
const { errors } = require('./middleware/errors');
app.use(errors)
.use(router.routes());
app.get('/some-request', function *(next){
// request that could error
});
app.listen();
这一切都很好,但我想用我的单元测试来测试中间件,也许是因为我对 Koa 和 Generator 函数还很陌生,我正在努力弄清楚如何做到这一点。
我知道如果我导入错误处理中间件,我需要传递一个会抛出错误的函数,但是如何执行传递的函数呢?是否需要关闭一些描述?如何断言/期望为状态代码等设置的值?
const { expect } = require('chai');
const { errors } = require('../middleware/errors');
describe('errors middleware', () => {
it('returns a 500 on a generic error', () => {
let thrower = function(){ throw new Error() }
let errorHandler = errors(thrower());
// mass of confusion
expect(errorHandler.next()).to.throw(Error);
});
});