というようなことを元々は teck.kayac.com Advent Calender 2013 の17日目 の記事として考えてたんだけど、結局なんか無性にWicketの事を書きたくなっちゃったので、お蔵入りになった記事をこっちに書く事にする。
カレンダーのノリで書いてたのをそのまま持ってくると大分寒い感じがするが、面倒なので不自然なカレンダー要素を消す意外は無編集で。
ndenv を homebrew で入れる話 または如何にして心配するのを止めてRequireJSを愛するようになったか
Advent Calenderネタの捏造のため紆余曲折あって週末Backbone.jsのexampleを永続化部分をローカルストレージじゃなくてAPIベースに書き換えつつテストをコマンドライン(Mocha on node)でやる、みたいなことをやってました。
その副産物としてndenvをhomebrewで入れられるようforkして弄りつつ、Formulaを書いたりしました。
brew tap mix3/ndenv
brew install ndenv node-build --HEAD
こんな感じで入れられると思います --HEAD なのはお察しください。多分他の誰かが既にやってるんじゃないかと思いますが気にしない事にしました。
先生助けてっ Mochaが息してないの!
で、node入れてbackbone-examplesを弄ったわけですがAPIベースにするのは割と簡単に出来る(Backboneがモデルの永続化にRESTが使える)のですが「さてRequireJSで分割したのだし何かテスト書くか」と適当に書くとあら不思議。Mochaでテストが全くが実行されません。
AMD準拠のmochaテストをWebとCUIで共通化 - それなりブログにあるように非同期関連でうまく行かないようで同ブログにて書いてある通り「amdefineで解決や!」と思ったらcollectionのテストの時にmodelを呼ぼうとして「みつかんねーよ!」と怒られてRequireJSの時と違ってbaseUrl設定してないんだし、そうだよなってなって奇声上げてました。
reqirejs で分割した後、mochaでcliテスト書こうとしたら全くテスト走らないので、amdefine 使ったらbaseUrl の関係でエラるしキエェェェーーー!!!ってなってる
— mix3 (@mix3) 2013, 12月 15
で色々見ててどうにもならない感じだったけど、なんか他のサンプルとか色々眺めてるとテストの中でrequirejs使ってるのが多いっぽかったので、どうもそっちの方が一般的のようです。
describe("Did it run?", function(){
it("model is a model", function(done){
// こんな感じで中でrequirejsを呼ぶ
requirejs(["model"], function(model) {
expect(model).to.be.a("model");
done();
});
});
});
無理せずrequirejs使っていきましょう。
もう一つテストで困るのが、コマンドラインテストだとajaxとかで怒られるということ。(domが無いからってことで良いんだよね多分)
- NilsLattek/backbone-requirejs-node-boilerplate
- Testing jQuery code with Mocha, Chai and jsdom | Netboy
この辺りをコピって参考にしてjsdomを使うようにしてあげると良いようです。
ということで出来たのがこちらになります。
どうやってコマンドラインでテストするかばかり考えていて「Backbonアプリのテストってどんな感じで書けば良いのか」についてまでたどり着かなかったので次触るときはそこまで考えて触りたいものですね。
まとめ
- 実は一番最初の発端は「AngularJS触ろう!」だったのにどうしてこうなった。
- 今はMarionette.jsが気になります。
- js、結局クライアントとサーバで分かれてるのが少し不幸っぽい(小並感)