今回はFacebook製のテストフレームワークJestを使って
Node/Expressで設定しているrouteに対してテストを行う方法を書いてみます。
個々のメソッドについてのテストは割愛します。
supertestのインストール
テスト用にインストールするので--save-devオプションをつけます。
jestを既にインストールされている方はsupertestだけでよいです。
npm install --save-dev supertest jest
Express側の準備
テストに使うルーティングは準備できているものとして話を進めます。
app.ts
import * as express from 'express';
//中略
var app = express();
var router = new Result().router
app.use('/api/v2/result',router);
result.ts
this.router.get('/season/:id(\\d{1,3})',this.showStats)
テストコードの書き方
今回は/api/v2/result/season/{hoge}
というエントリーポイントを用意しています。
- hogeが整数
- ステータス200
- hogeが整数でない
- ステータス404(Bad Requestでもよい気はします)
- hogeで指定したIDにデータがない
- ステータス404
以下のテストコードではPromiseを使っています。
URLに対してGETリクエストを投げ、thenでHTTPステータスコードを
受け取ってtoBe()
で判定します。
result.test.js
//コンパイルしたtypescriptの出力先からインポートします
const app = require('../build/src/app')
const request = require('supertest')
describe('result.ts', () => {
it('正しい引数',()=>{
request(app).get('/api/v2/result/season/39')
.then((response)=>{
expect(response.statusCode).toBe(200);
})
})
it('誤った引数',()=>{
request(app).get('/api/v2/result/season/a')
.then((response)=>{
expect(response.statusCode).toBe(404);
})
})
it('誤った引数',()=>{
request(app).get('/api/v2/result/season/30a')
.then((response)=>{
expect(response.statusCode).toBe(404);
})
})
it('データがない引数',()=>{
request(app).get('/api/v2/result/season/50')
.then((response)=>{
expect(response.statusCode).toBe(404);
})
})
})