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);
});
});