訳注
これはendpoint-testing.mdの日本語訳です。こちらがAVAのmasterブランチとの差分のリンクになります(このリンクをクリックして、endpoint-testing.md
に変更点が見当たらなければ、この翻訳が最新であることを意味します)。
AVAはエンドポイントのテストのためのビルトインメソッドを持っていませんが、どのようなアサーションライブラリでも一緒に利用できます。supertest-as-promised
を使ってみましょう。
テストを直列で実行するので、同じインスタンスを参照するとテスト間でお互いに打ち消しうるために、テスト毎に新たなサーバーインスタンスを作成するのがベストです。これは、test.beforeEach
やt.context
、もしくは単純にファクトリー関数で実現できます。
function makeApp() {
const app = express();
app.post('/signup', signupHandler);
return app;
}
次に、supertestにサーバーインスタンスを挿入します。唯一の落とし穴は、supertestのend
メソッドの代わりにpromiseかasync/awaitの構文を使用することです:
test('signup:Success', async t => {
t.plan(2);
const res = await request(makeApp())
.post('/signup')
.send({email: 'ava@rocks.com', password: '123123'});
t.is(res.status, 200);
t.is(res.body.email, 'ava@rocks.com');
});