WEB+DB PRESS Vol.73にJSのユニットテストについて書きました!
本日(2/23)発売の WEB+DB PRESS Vol.73 にて、JavaScript連載第6回『最新ツールを使ったモダンなユニットテスト Mocha, Testem, Sinon.JS』を執筆させていただきました!
- 作者: 設樂洋爾,白土慧,はまちや2,大和田純,松田明,後藤大輔,ひろせまさあき,小林篤,近藤宇智朗,まかまか般若波羅蜜,Mr. O,川添貴生,重国和宏,柳澤建太郎,奥野幹也,佐藤鉄平,後藤秀宣,mala,中島聡,堤智代,森田創,A-Listers,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2013/02/23
- メディア: 大型本
- 購入: 12人 クリック: 131回
- この商品を含むブログ (4件) を見る
内容はこんな感じ。
- 最近のJS開発におけるユニットテストの位置づけ
- やたらと盛り上がっているJSのテスト関連ツールの総まとめ
- Mocha/expect.jsによるユニットテストの書き方
- Testemを使って複数ブラウザでリモートテスト実行
- Sinon.JSでモックとフェイクタイマー
特に前半の方はがんばって書いていて、その結果、JS連載なのにいきなり「アジャイルテストの4象限」が登場するような事態になっていますw
あと、複雑怪奇に入り組んできたJSテスト関連ツールを機能レイヤー別にマッピングした図も掲載していて、これはかなり分かりやすいのでは?と個人的にお気に入りです。Jasmine, Mocha, Chai, expect.js, Sinon.JS, JsTestDriver, Buster.JS, Testem, Testacular, PhantomJS, jsdom, etc... どれがどんな機能を持っていて、どう組み合わせて使うのか一目で分かります。
さっそくhokaccha先生にもお褒めいただき、光栄でございます!
.@teppeis さんのテストの記事おもしろかった。testem試してみよ。 #wdpress
— Kazuhito Hokamura (@hokaccha) February 21, 2013
ということで、ちょっと書ききれなかった部分の補足などを。
JavaScriptでユニットテストは必要なの?
結論としては「ケースによる、ただし必要とするケースが増えているのが最近の流れ」。
それに伴ってツール側も進化していて、
一気にテスト関連ツールが吹き出してきたのを見ると、やっぱりNode.jsが登場してブラウザからJSを解き放ったというのは非常に大きかったと思いますね。
という感じなので、数年前にこりゃやってられん、と思った方ももう一度触ってみると良いと思います。
私も昔はエンドツーエンドのインテグレーションテストあればいいでしょ?と考えていた時期もありましたが、最近は仕事のチームでもユニットテストの重要性が共有されてきて、メモリリークとか細かいバグがモリモリ出てきたり、リファクタリングしやすくなったりと効果を出しています。
「リモートテストランナー」って何?
すみません、呼び方がなかったので勝手に名付けました。。 JsTestDriverみたいなリモートでブラウザをキャプチャしてテスト実行するツール群のことです。
最近 内装業に転職された kleptoを開発されているkyo_agoさんは「Swarm系」という用語を使われてます。
そういえば、TestSwarmとかJsTestDriverとかBusterJSとかの「接続されたクライアントにJSを配信してテストされた結果を返す」系テストフレームワークは「Swarm系」って呼ぶことにしよう(どっかでそんな記述見たので)
— kyo ago (@kyo_ago) March 2, 2012
各公式を見てみるとこんな感じで、
- Testem: "Interactive JS Test Runner", "A test runner that makes Javascript unit testing fun."
- Testacular: "Spectacular Test Runner for JavaScript"
- TestSwarm: "Distributed continuous integration testing for JavaScript."
- JsTestDriver: "Remote javascript console"
- BusterJS: "A browser JavaScript testing toolkit. It does browser testing with browser automation"
どうやらブラウザでテストする部分はやっぱり "Test Runner" だなと。ただし「テストランナー」って言っちゃうと文脈によってJUnitのあれとかと混同しちゃうので、「リモートテストランナー」っていう言葉を使いました。どうでしょう?
ということで
エンジニアCROSSやFrontrendでステマっていた件、ようやく発売されましたのでぜひご覧下さいませ。 JSのテスト周辺がもっと盛り上がればいいなと思います。
各ツールについてはちょっと踏み込み甘いところがあるので、ブログの方に書いていければいいな。
それではご感想お待ちしています!