24
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

mocha/supertest でAPIテストを始める

Last updated at Posted at 2016-03-02

メモ。もうちょっと使いこなしてから加筆したい所。

導入

$ npm install supertest should --save-dev

test/api_test.jsを作成

test/api_test.js
var request = require('supertest');


describe("hoge",function(){
    this.timeout(2000)
    var agent = request.agent("http://hogeapp.app/") 

    it('send api', function (done) {
        agent
        .get('/debug')
        .set('Accept', 'application/json')
        .expect(function(res){
            res.status.should.equal(404);
        }).end(function(err,res){
            if(err){
                throw err;
            }
            done();
        });
    });
})

argent 変数の単位でセッションやクッキーが保持される。

実行時には以下のコマンドを叩く。

$ mocha test/api_test.js --requrie should

レスポンスの検証

expectに渡すのコールバックの第一引数ではレスポンスオブジェクトが取得できます。

res.status でステータスコード、res.bodyでボディのJSONが取得できます。

ステータスコードの検証

res.status.should.equal(200);

レスポンス型の検証

res.type.should.equal("application/json");

プロパティの存在チェック

res.body.should.hasOwnProperty("status")

プロパティの値チェック

res.body.status.should.equal("OK");

プロパティが配列であることのチェック

res.body.item_list.should.be.Array();

その他shouldの使い方については、
http://shouldjs.github.io/
を参考にすると良いです。

テスト時のデバッグ

テストのコマンドは長くなりがちなのでMakefileなどに記述しておきます。
デバッグのためにnode-inspectorなどを使用するならなおさら。

Makefile
.PHONY: test
test:
	open http://127.0.0.1:8080/?port=5858 &
	mocha test/api_test.js --require should --debug-brk

--debug-brkオプションで最初にブレイクポイントが自動で付与され、カスタムのブレイクポイントを張る猶予が与えられる。

openコマンドを挟んで自動でデバッグ窓が開くようにしておくと便利です。

テスト設計

コード管理

  • 設定を注入するモジュール
  • APIの発行に関するモジュール
  • シナリオのモジュール(正常系・異常系)

APIの発行に関するモジュール

APIの発行に関する処理と、正常系のexpectをモジュールにまとめておく。

シナリオごとにAPIを自由に組み合わせて使用できるので、様々なシナリオの検証を記述する際に苦になりにくい。

  • argent は引数で受け取れるようにする。
  • APIの発行と、正常系・異常系のexpectは分けておく。

次のシナリオに渡すための、レスポンスの加工とかまでやりだすとめんどいのでシンプルなexpectに留める。

デバッグ時にブレイクポイントを張る事を考えるなら共通のend用クロージャを作っておくのも良い。
複数の箇所にブレイクポイントを張る手間が省けて楽。

課題

  • describe/itの明確な粒度設計
  • テスト実行の手間。コマンド長い。requireくらいはソースの中で書けない?
  • codeception みたいにもうちょっとカジュアルにデバッグしたい。inspectorは便利だけど窓が開くのは面倒に思う。
24
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?