Как часть переноса старого приложения из ExpressJs в Koa JS (v1). Я написал часть промежуточного программного обеспечения для обработки любых ошибок, которые происходят. Это выглядит примерно так:Как проверить пользовательское связующее ПО Koa для обработки ошибок?
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);
});
});