読者です 読者をやめる 読者になる 読者になる

WEB+DB PRESS Vol.73にJSのユニットテストについて書きました!

本日(2/23)発売の WEB+DB PRESS Vol.73 にて、JavaScript連載第6回『最新ツールを使ったモダンなユニットテスト Mocha, Testem, Sinon.JS』を執筆させていただきました!

WEB+DB PRESS Vol.73

WEB+DB PRESS Vol.73

  • 作者: 設樂洋爾,白土慧,はまちや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先生にもお褒めいただき、光栄でございます!

ということで、ちょっと書ききれなかった部分の補足などを。

JavaScriptユニットテストは必要なの?

結論としては「ケースによる、ただし必要とするケースが増えているのが最近の流れ」。

  • WebサイトからWebアプリへ(含ゲーム)
  • コードの大規模化と複雑化
  • 反復的な開発プロセス(=要リファクタリング耐性)
  • 「設計のためのテスト」というTDD的開発スタイル

それに伴ってツール側も進化していて、

一気にテスト関連ツールが吹き出してきたのを見ると、やっぱりNode.jsが登場してブラウザからJSを解き放ったというのは非常に大きかったと思いますね。

という感じなので、数年前にこりゃやってられん、と思った方ももう一度触ってみると良いと思います。

私も昔はエンドツーエンドのインテグレーションテストあればいいでしょ?と考えていた時期もありましたが、最近は仕事のチームでもユニットテストの重要性が共有されてきて、メモリリークとか細かいバグがモリモリ出てきたり、リファクタリングしやすくなったりと効果を出しています。

「リモートテストランナー」って何?

すみません、呼び方がなかったので勝手に名付けました。。 JsTestDriverみたいなリモートでブラウザをキャプチャしてテスト実行するツール群のことです。

最近 内装業に転職された kleptoを開発されているkyo_agoさんは「Swarm系」という用語を使われてます。

各公式を見てみるとこんな感じで、

どうやらブラウザでテストする部分はやっぱり "Test Runner" だなと。ただし「テストランナー」って言っちゃうと文脈によってJUnitのあれとかと混同しちゃうので、「リモートテストランナー」っていう言葉を使いました。どうでしょう?

ということで

エンジニアCROSSやFrontrendでステマっていた件、ようやく発売されましたのでぜひご覧下さいませ。 JSのテスト周辺がもっと盛り上がればいいなと思います。

各ツールについてはちょっと踏み込み甘いところがあるので、ブログの方に書いていければいいな。

それではご感想お待ちしています!