Subaru365 Lab_

技術備忘録。都内のIT勉強会に出没します。

frisby.jsを使って自作APIのテストをしてみた

f:id:Subaru365:20160211230829p:plain

今回はクライアントからAPIへアクセスするテストで簡単なものないかな~と調べていたらありました。[frisby.js]というnode.jsで作られたパッケージです。

[API テスト]でググるとすぐ出てくるので、ご存じの方は多いと思いますがアシアルさんがわかりやすい記事を書いていたのでこれを参考にサクッと動かしてみました。

REST APIのテストをFrisbyで自動化する : アシアルブログ



使い方は簡単!

1.作業ディレクトリ上でnpmからfrisbyとjasmine-nodeというパッケージをインストールします。

# npm install frisby
# npm install -g jasmine-node


2.specというディレクトリをさらに作成し、その中に *spec.js (*には適当な文字)を作成します。これは、先ほどfrisby.jsと共に導入したjasmine-nodeが最後にspecとつくファイルを一斉にテストしてくれるため、このような名前で作成します。

$ mkdir spec
$ cd spec
$ vim google_spec.js


3.今回はテスト対象にgoogle geocoding APIを例に利用させていただきます。ではメインとなるテストコードがこちら。google_spec.jsを開いて、、

var frisby = require('frisby');

frisby.create('GET 東京の位置データ')
    .get('https://maps.googleapis.com/maps/api/geocode/json?address=tokyo&sensor=false')
    .expectStatus(200)
    .expectJSON({
            status: 'OK'
    })
    .toss();

このシンプルさ。node.jsを普段読まない僕にとっても非常に親切なコードです。笑

簡単に解説すると、

  • frisby.create() - リクエストインスタンスを作る
  • .get() - アクセス先を指定
  • .expectStatus() - ステータスコードの確認
  • .expectJSON() - JSON内容の確認
  • .toss() - リクエスト実行 (※frisby.create()毎に実行)

といった感じです。

expectJSONの確認は実際にテストで使用したこちらのURLを確認して照らし合わせてみてください。JSONに含まれている "status" : "OK" の部分を今回はテストしました。
https://maps.googleapis.com/maps/api/geocode/json?address=tokyo&sensor=false


4.それでは実行してみましょう!先ほどのを保存して、作業ディレクトリ上で ↓

$ jasmine-node .

f:id:Subaru365:20160212001944p:plain

あっさり成功しました!ちなみに失敗すると、

f:id:Subaru365:20160212002550p:plain

としっかりエラー内容を表示してくれます('◇')ゞ

あとはテストしたいAPIのURLをずらずら同じように下に書いていくだけですね。
そして、jasmine-node . いいですね~

ほかにも実行時にJSONをコンソールへ表示させたりヘッダーの確認を行ったりなど一通りのクライアントチェック機能はついてます。公式リファレンスはこちら

また、僕が自作したAPIはセッションの認証を必要とするエンドポイントがいくつかあったため、このようにレスポンスヘッダーに含まれるcookieを取得し、それ以降のヘッダーに加えるコードを書いて解決しました。

var frisby      = require('frisby');
var base_url = 'https://api.gocci.me'
var cookie     = "";
 
frisby.create('GET Guest Login')
    .get(base_url + '/auth/login/?user=guest')
    .inspectHeaders()
    .inspectJSON()
    .expectStatus(200)
    .expectJSON({code: 'SUCCESS'})
    
    .after(function(body, res) {
        cookie = res.headers['set-cookie'];

        frisby.create('GET User Data')
            .get(base_url + '/data/me', {
                headers: {"Cookie": cookie,}
            })
            .expectStatus(200)
            .expectJSON({code: 'SUCCESS'})
            .toss();
    })
    .toss();


これでセッションも維持しつつテスト可能です。
是非簡単なので色々カスタマイズして試してみてください('ω')ノ
それでは!

広告を非表示にする