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 とジェネレーターの機能の両方にまだかなり慣れていないため、これを行う方法を理解するのに苦労しています.
エラー処理ミドルウェアをインポートする場合、エラーをスローする関数を渡す必要があることはわかっていますが、渡された関数をどのように実行すればよいでしょうか? いくつかの説明を閉じる必要がありますか?ステータスコードなどに設定された値をアサート/期待するにはどうすればよいですか?
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);
});
});