var klass = require('klass')
var Person = klass(function (name) {
this.name = name;
})
.methods({
sing:function() {
console.log(this.name+' is singing');
}
})
module.exports = Person;
継承も使える
SuperHuman.js
var Person = require('./Person')
var SuperHuman = Person.extend(function (name) {
})
.methods({
sing: function() {
this.supr()
this.fly()
},
fly: function() {
console.log(this.name + ' は空を飛ぶ')
}
})
module.exports = SuperHuman;
main.js
var Person = require('./Person');
var SuperHuman = require('./SuperHuman');
var miku = new Person('初音ミク')
miku.sing();
var yazawa = new SuperHuman('矢沢永吉');
yazawa.sing();
実行結果。
$ node main.js
初音ミク is singing
矢沢永吉 is singing
矢沢永吉 は空を飛ぶ
$ 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)
$ 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)