はじめに
Chakram はREST APIを実行するためのTestFrameworkです。記述方法はBDDが採用されているため、自然とテストの内容が解りやすいテストコードを記述することが出来ます。また、サイト上に掲載してあるExampleはとても親切です。今回はそんなChakramをDocumentを確認しながら、インストールから実際に使用するところまでをQiitaのAPIを使用して行いたいと思います。
インストール
下記のコマンドを実行すればChakramのインストールが完了します。
# Chakramのインストール (--save-dev を付与するとpackege.jsonにchakramを追記してくれます。)
npm install chakram --save-dev
# 実行結果
chakram@1.0.1 ../node_modules/chakram
├── extend-object@1.0.0
├── chai-subset@1.0.1
├── chai-as-promised@5.1.0
├── tv4@1.1.12
├── q@1.4.1
├── chai@3.0.0 (assertion-error@1.0.1, type-detect@1.0.0, deep-eql@0.1.3)
└── request@2.57.0 (caseless@0.10.0, aws-sign2@0.5.0, forever-agent@0.6.1, stringstream@0.0.4, oauth-sign@0.8.0, tunnel-agent@0.4.1, isstream@0.1.2, json-stringify-safe@5.0.1, node-uuid@1.4.3, qs@3.1.0, combined-stream@1.0.5, bl@0.9.4, form-data@0.2.0, http-signature@0.11.0, mime-types@2.0.14, tough-cookie@2.0.0, hawk@2.3.1, har-validator@1.8.0)
Chakramで簡単なテストを書く ...φ(..)
早速、Qiitaの投稿一覧を取得するAPIを叩いて下記の内容をテストするChakramで書いてみました。
- レスポンスのステータスコードが200であるか
- レスポンスの構造に指定したkeyが含まれているか
var chakram = require('chakram'),
expect = chakram.expect;
describe("Qiita API", function() {
var apiResponse;
before(function () {
apiResponse = chakram.get("https://qiita.com/api/v2/items");
});
it("should return 200 on success", function () {
return expect(apiResponse).to.have.status(200);
});
it("should include rendered_body, body, title, user", function () {
return expect(apiResponse).to.have.schema('[0]', {
"required": [
"rendered_body",
"body",
"title",
"user"
]
});
});
});
テストの実行
Chakramで記述したテストを実行するには別途mochaが必要になります。
下記のコマンドを実行しmochaをインストールしましょう。
# mochaのインストール
npm install -g mocha
# 実行結果
/Users/kenya/.nodebrew/current/bin/_mocha -> /Users/kenya/.nodebrew/current/lib/node_modules/mocha/bin/_mocha
/Users/kenya/.nodebrew/current/bin/mocha -> /Users/kenya/.nodebrew/current/lib/node_modules/mocha/bin/mocha
mocha@2.3.2 /Users/kenya/.nodebrew/current/lib/node_modules/mocha
├── escape-string-regexp@1.0.2
├── supports-color@1.2.0
├── commander@2.3.0
├── growl@1.8.1
├── diff@1.4.0
├── mkdirp@0.5.0 (minimist@0.0.8)
├── debug@2.0.0 (ms@0.6.2)
├── glob@3.2.3 (inherits@2.0.1, graceful-fs@2.0.3, minimatch@0.2.14)
└── jade@1.11.0 (character-parser@1.2.1, void-elements@2.0.1, commander@2.6.0, jstransformer@0.0.2, clean-css@3.4.3, constantinople@3.0.2, with@4.0.3, uglify-js@2.4.24, transformers@2.1.0)
以上で準備は完了です。それではテストを実行してみましょう。
# テストの実行(テストファイル(qiita.js)のパスは各自の環境に合わせて下さい。)
mocha qiita.js
# 実行結果
Qiita API
✓ should return 200 on success (559ms)
✓ should include rendered_body, body, title, user
2 passing (605ms)
見事にテストに成功しました!とても簡単ですね!
つかってみて
現在、仕事でAPIを沢山書いているのですが、お恥ずかしながらテストが存在しません。。。1つも。。。
今後、毎回手動でテストを実行するのも継続的に見て宜しくないことは明らかなので、Chakram等のTestFrameworkを採用してより良い環境にしていきたいと思います!