Mac(Yosemite)上でfrisbyとjasmine-nodeを使ったWebAPIテスト環境を作る。
レスポンスがJSONであれば、frisbyは便利。
###インストール
・node.jsが入ってない場合はbrewかダウンロードしてインストール。
・続いて、frisbyとjasmine-nodeをインストール。今回はどちらも-gとする
sudo npm install -g frisby
sudo npm install -g jasmine-node
ちなみに、frisbyは/usr/local/lib/node_modules/frisbyに入る。
###テスト用のAPI準備
今回はPHPで用意。xとyを受けっとって足すAPI。
add.php
<?php
$x = 1;
$y = 2;
if(isset($_POST['x'])) $x = $_POST['x'];
if(isset($_POST['y'])) $y = $_POST['y'];
$ans = $x + $y;
$response = array();
$response['api_status'] = "OK";
$response['ans'] = (string)$ans;
header("Content-Type: application/json");
echo json_encode($response);
###テストを書く
で、テストの方。
どこかにspecというディレクトリを作って、*.spec.jsで保存しておくと、jasmine-nodeがテスト対象としてくれる。
toEqual()をどう使っていのか???と思っていたが、afterJSON()に書けばいいらしい。受け取ったjsonは引数に渡されるようだ。
test01.spec.js
var frisby = require('/usr/local/lib/node_modules/frisby');
frisby.create("サンプル")
.post('http://localhost/add.php',{
x:3,
y:4
})
.expectStatus(200)
.expectHeader('Content-Type','application/json')
.expectJSONTypes({
api_status: String,
ans: String
})
.afterJSON(function(data){
var ans = data.ans;
expect(ans).toEqual('7');
})
.toss();
なぜかfrisbyのpathをフルパスで書かないと動かなかった。。。???
###テストを実行する
specフォルダで、
jasmine-node .
とすると、そこに置いてある*.spec.jsを実行してくれる。