Matadorでmochaを使ったテストをやってみます。
Matadorは前回のエントリーでインストールします。
[Node.js] Matador+CoffeeScriptの環境を構築する
テストフレームワークにMochaとshouldをインストールします。
$ npm install -g mocha should $ matador init masamune $ mkdir test
次にテストを書いてみます。モデルからやってみます。
Masamune.test.coffee
app = require('matador').createApp __dirname + '/../' should = require 'should' describe 'MasamuneModel', -> describe '生成', -> it '政宗モデルを生成できる', (done) -> MasamuneModel = app.getModel('Masamune', true) model = new MasamuneModel() should.exist model done()
テストを実行してみましょう。
$ mocha . ✖ 1 of 1 tests failed: 1) MasamuneModel 生成 政宗モデルを生成できる: Error: Unable to find models/MasamuneModel at /Users/inouetomoyuki/Dropbox/Projects/node/matador_coffee_sample/node_modules/matador/src/matador.js:78:25 at /Users/inouetomoyuki/Dropbox/Projects/node/matador_coffee_sample/node_modules/matador/src/matador.js:83:36 at HTTPServer.getModel (/Users/inouetomoyuki/Dropbox/Projects/node/matador_coffee_sample/node_modules/matador/src/matador.js:201:12) at Context.<anonymous> (/Users/inouetomoyuki/Dropbox/Projects/node/matador_coffee_sample/test/MasamuneModel.test.coffee:12:29) at Test.run (/Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/mocha/lib/runnable.js:143:15) at Runner.runTest (/Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/mocha/lib/runner.js:272:10) at /Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/mocha/lib/runner.js:316:12 at next (/Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/mocha/lib/runner.js:199:14) at /Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/mocha/lib/runner.js:208:7 at next (/Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/mocha/lib/runner.js:157:23) at Array.0 (/Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/mocha/lib/runner.js:176:5) at EventEmitter._tickCallback (node.js:192:40)
「MasamuneModelがありません」と怒られますので、作ってみます。Matadorのジェネレーターを使って生成してみます。
$ matador model Masamune generating model Masamune Successfully created ./app/models/MasamuneModel.js $ js2coffee app/models/MasamuneModel.js > app/models/MasamuneModel.coffee $ rm app/models/MasamuneModel.js
もう一回実行してみます。
$ mocha . ✔ 1 tests complete (9ms)
テストが通りました。
もう少しだけテストを書いてみましょう。
app = require('matador').createApp __dirname + '/../' should = require 'should' describe 'MasamuneModel', -> describe '生成', -> it '政宗モデルを生成できる', (done) -> MasamuneModel = app.getModel('Masamune', true) model = new MasamuneModel() should.exist model done() describe '取得', -> it '伊達家の歴代を取得する', (done) -> MasamuneModel = app.getModel('Masamune', true) model = new MasamuneModel() model.findAll (err, dateList) -> dateList.length.should.eql 1 dateList.should.eql ['伊達政宗'] done()
実行してみます。
$ mocha .. ✖ 1 of 2 tests failed: 1) MasamuneModel 取得 伊達家の歴代を取得する: TypeError: Object #<fn> has no method 'findAll' at Context.<anonymous> (/Users/inouetomoyuki/Dropbox/Projects/node/matador_coffee_sample/test/MasamuneModel.test.coffee:23:22) at Test.run (/Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/mocha/lib/runnable.js:143:15) at Runner.runTest (/Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/mocha/lib/runner.js:272:10) at /Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/mocha/lib/runner.js:316:12 at next (/Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/mocha/lib/runner.js:199:14) at /Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/mocha/lib/runner.js:208:7 at next (/Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/mocha/lib/runner.js:157:23) at Array.0 (/Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/mocha/lib/runner.js:176:5) at EventEmitter._tickCallback (node.js:192:40)
findAllメソッドがないと怒られます。プロダクトコードを修正します。
app/models/MasamuneModel.coffee
module.exports = (app, config) -> app.getModel("Application", true).extend().methods({ findAll:(callback) -> callback(null, ['伊達政宗']) })
テストを実行してみます。
$ mocha .. ✔ 2 tests complete (7ms)
無事通りました。
こんな感じでやっていけば、何とかなりそうです。テストコード内の1行目「app」の取得方法がかっこ悪いですが。
0 件のコメント:
コメントを投稿