背景
開発で既存のREST APIの調査・改修に関わったので、とりあえず正しく動く確認できる環境を作りたかった。
Google Chromeアプリの「ARC」などがよく紹介されていて、単発でのチェックにはとても良いけど、「まとめて動作試験」だと人力作業になってしまうし、パラメータの共有などがしづらい。
テストのコード化
ということで、コードでの動作確認方法として、「Frisby+Jasmine」を使ってみた。
参考文献も多く、確かに便利。JSONでやり取りする場合の内容チェックもやりやすい。
ただ、テストは「インプット→アウトプット」の組み合わせチェックとなるので、その分かなり定型コードを書かなければいけない。
なので、APIに渡すJSON(インプット)、APIから返るJSON(アウトプット)、をGoogleスプレッドシートで集中管理できると嬉しい。
今回は、簡単にスプレッドシートからデータを読み出せる"google-spreadsheets-parser"を使ってコードを作成。
Googleスプレッドシートで、一列目に「title」「post」「expected」というタイトル列を作成し、二列目以降にテストデータを入力して、下記を実行する。
エンドポイント周りなどは、試験するREST APIに応じて変わったりすると思う。
var category = "<category>"; // シートのタブ名
var GoogleSpreadsheetsParser = require('google-spreadsheets-parser');
var frisby = require("frisby");
var gss = new GoogleSpreadsheetsParser("<公開したスプレッドシートのリンク>",
{ sheetTitle: category, hasTitle: true });
var API_END_POINT = "<http://localhost:8080/api>"; // 環境に合わせて
var paramsJson = gss.toJson();
var params = JSON.parse(paramsJson);
for (var index in params) {
var obj = params[index];
var title = obj.title;
var post = obj.post;
var expected = obj.expected;
frisby.create(title)
.addHeaders(
{ "Content-Type":"application/json" }
)
.post(
API_END_POINT,
null,
{ "body": post }
)
.expectStatus(
200
)
.expectJSON(JSON.parse(expected))
.toss();
}
% npm install --save-dev jasmine-node frisby google-spreadsheets-parser
% node_modules/jasmine-node/bin/jasmine-node sample_spec.js
駆け足のメモ程度ですが。
テストのパラメータをスプレッドシート化できると、テスト実行コードはシンプルになるので良い。
定型的なものには、自動化・データ集約のメリットは大きい。
参考
http://frisbyjs.com/
https://www.npmjs.com/package/google-spreadsheets-parser
http://qiita.com/zaburo/items/8f967acd26ea08e2a54a
http://ttr-hamasaki.hatenablog.com/entry/2015/09/27/070557
http://qiita.com/tanakaworld/items/48cf222e1e911e1761c4