業務的な何かやら、ハッカソンなどで使ったので感想
http://sailsjs.org/
名前の通り、Ruby on Rails っぽさがあるフレームワークで、
APIづくりなどで力をいかんなく発揮しそう。
良い所
テストについては、mocha と supertest 、あと barrels を組み合わせて行っています。
supertest は、テスト用にHTTPリクエストのために使って、barrels は、データベースの初期データなどを用意するために使ってます。以下のような感じでテストが書けてます。
(ココらへんとか参考にしてます。 https://groups.google.com/forum/#!topic/sailsjs/yD6l9ii7R1g)
test/global.test.js
var Sails = require('sails')
, barrels = require('barrels');
before(function (done) {
Sails.lift({
log: {
level: 'error',
},
adapters: {
// データベースはメモリを使う(テスト終了後に消える)
default: 'sails-memory'
},
// port は 9999 を利用
port: 9999
}, function (err, sails) {
if (err) return done(err);
this.app = sails;
// これで test/fixtures の下にある json を元にテストデータが作られる
// https://github.com/bredikhin/barrels 参照
this.fixtures = barrels.objects;
barrels.populate(function (err) {
done(err);
});
});
});
after(function (done) {
sails.lower(done);
});
test/FooController.test.js
describe('Foo API', function () {
describe('#find()', function () {
it('should return ok', function (done) {
request(app.express.app)
.get('/foo')
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200)
.end(function (err, res) {
assert.equal(err, null);
assert.equal(res.body.result, 'ok');
done();
});
});
});
うーん。ってところ。
- 0.9時点の話だが、express.js との連携がべったりしてしまっているため、例えばこの処理を取り除きたいというのができなかったりする。0.10だとその辺の処理がざっと変わるらしい。期待したい。
- ドキュメントに書いていない隠し仕様的なものが、よくあったりするので、結局 sails.js のソースコードを探求することになる。セッションを無効化する場合は、Session 設定の adapter を null にすればよいのだが、この点はドキュメントに一切記されていない。http://sailsjs.org/#!documentation/config.session コントリビュートやらブログなどを書いて、そのへんの知識をまとめていきたい。
- 公式ドキュメントにテストの書き方的なのが記されてない。
- 込み入ったことをやろうとすると、Express.js のドキュメントを読みまくる必要があったりする。
今のところ、0.10.0-rc7 が最新の状態なので、0.10 がリリースされたら、もう一度見てみたいかなと思ってます。