javascript unit test why? what? how?

43
JavaScript Unit Test Why? What? How? 佐藤鉄平@teppeis 2013/04/26 第38回HTML5とか勉強会

Upload: teppeis

Post on 31-May-2015

15.297 views

Category:

Technology


0 download

DESCRIPTION

第38回HTML5とか勉強会「Webアプリ×テスト最新事情」の発表資料です。 https://html5j.cloudfoundry.com/event/sd38

TRANSCRIPT

Page 1: JavaScript Unit Test Why? What? How?

JavaScript Unit TestWhy? What? How?

佐藤鉄平@teppeis

2013/04/26第38回HTML5とか勉強会

Page 2: JavaScript Unit Test Why? What? How?

自己紹介•佐藤鉄平•@teppeis•サイボウズでkintoneっていうB2Bサービスを作っています。

•フロントからバックエンドまで•宗派: Vim, JS, Google Closure

Page 3: JavaScript Unit Test Why? What? How?

JS連載2年目に突入!

Page 4: JavaScript Unit Test Why? What? How?

一人目なので、JSテストの全体像をお話します。まだJSでテストを書いてない人向けです。

Page 5: JavaScript Unit Test Why? What? How?

コードはでてきません!

Page 7: JavaScript Unit Test Why? What? How?

どうしてJavaScriptでユニットテストを書くのか?

Page 8: JavaScript Unit Test Why? What? How?

そもそもテストって何だろう?

Page 9: JavaScript Unit Test Why? What? How?

実践アジャイルテスト

Page 10: JavaScript Unit Test Why? What? How?

アジャイルテストの4象限ビジネス面

技術面

チームを支援する

製品を批評する

結合テスト機能テスト

ユニットテスト

ユーザビリティテスト探索的テスト

性能テスト脆弱性テスト

Page 11: JavaScript Unit Test Why? What? How?

ビジネス面

技術面

チームを支援する

製品を批評する

結合テスト機能テスト

ユニットテスト

ユーザビリティテスト探索的テスト

性能テスト脆弱性テスト

結合テスト

Page 12: JavaScript Unit Test Why? What? How?

結合テスト•ビジネスを支援する技術面のテスト•エンドツーエンド•「何を作るのか?」•どんなサービスでも必須•自動化推奨 (Seleniumなど)

Page 13: JavaScript Unit Test Why? What? How?

ビジネス面

技術面

チームを支援する

製品を批評する

結合テスト機能テスト

ユニットテスト

ユーザビリティテスト探索的テスト

性能テスト脆弱性テスト

ユニットテスト

Page 14: JavaScript Unit Test Why? What? How?

ユニットテスト•チームを支援する技術面のテスト•開発者による開発者のためのテスト•「どう作るのか?」•設計とコードの質が向上•大規模ではほぼ必須•自動化が必須

Page 15: JavaScript Unit Test Why? What? How?

TDDと黄金の回転 ©t-wada

きれい

汚い

(すぐには)動かない 動作する

Red

Green

Refactoring

TDDと黄金の回転

http://www.slideshare.net/t_wada/javaja-tdd-2nd

Page 16: JavaScript Unit Test Why? What? How?

実践テスト駆動開発

Page 17: JavaScript Unit Test Why? What? How?

二重のフィードバックループ

失敗する受入テストを書く

失敗するユニットテストを書く

テスト成功!

リファクタリング

Page 18: JavaScript Unit Test Why? What? How?

CI

Page 19: JavaScript Unit Test Why? What? How?
Page 20: JavaScript Unit Test Why? What? How?

JSをとりまく状況•コードとチームの大規模化•フロントエンド領域の増大•高速で高品質な開発の要求

Page 21: JavaScript Unit Test Why? What? How?

ユニットテストの必要性が高まってる!

Page 22: JavaScript Unit Test Why? What? How?

テスト環境の向上•Node.jsの隆盛•テスト関連ツールの盛り上がり•MV*フレームワークやモジュール化の仕組みが成熟

Page 23: JavaScript Unit Test Why? What? How?

ユニットテストがやりやすくなった!

Page 25: JavaScript Unit Test Why? What? How?

どこから手をつけたら。。

Page 26: JavaScript Unit Test Why? What? How?

JSのユニットテストって難しいんでしょ?

Page 27: JavaScript Unit Test Why? What? How?

JSテストの難しい点•コードがビューと結びつきがち

•実行環境=ブラウザが扱いづらい=> MV*な設計で解決

=> ツールで解決

Page 28: JavaScript Unit Test Why? What? How?

MV*•いろいろ宗派はあるけど、やりたいことはビューとロジックの分離。

•それさえできれば、ロジック(Model)のテストは普通にできるはず。

Page 29: JavaScript Unit Test Why? What? How?

例) メール一覧画面•Model•全部のリスト•宛先で絞り込み•タグで絞り込み•View•受け取ったら表示するだけ

Page 30: JavaScript Unit Test Why? What? How?

Modelのテストをしよう!•純粋なロジック•不確実性が低い•リファクタリングで疎結合に分解

Page 31: JavaScript Unit Test Why? What? How?

Viewのテストは•DOMのテストは書きにくい•ユーザビリティはテストできない•画面を見ながらの試行錯誤が必要•書きたくなったらチャレンジしよう!

Page 33: JavaScript Unit Test Why? What? How?

テストツールの分類

PhanotmJS jsdomenvjs実ブラウザ

TestemKarma

Jasmine

QUnit

Mocha JsTestDriverBuster.JS

Chaiexpect.js

Sinon.JS

実行環境

リモートテストランナー

テスティングフレームワーク

モックライブラリ

Page 34: JavaScript Unit Test Why? What? How?

テスティングフレームワーク•テストの記述と実行を担当•どれを選んでも間違いはないレベル•詳細は今日の他の方の発表をお聞きくださいw

Page 35: JavaScript Unit Test Why? What? How?

実行環境が重要•実ブラウザ•本物だけど面倒、遅い•ヘッドレスブラウザ (PhantomJS)•だいたい本物でそこそこ速い•でもWebKitだけ•シミュレータ(jsdom, envjs)•偽物だけど速い

Page 36: JavaScript Unit Test Why? What? How?

リモートテストランナー•ブラウザをキャプチャリングしてリモートでテストを実行するツール

•実ブラウザの欠点を補う•同時に複数のブラウザでTDDが可能•Testem, Karma(Testacular),JsTestDeriver, Buster.JS

Page 37: JavaScript Unit Test Why? What? How?

どれを選ぶ?

PhanotmJS jsdomenvjs実ブラウザ

TestemKarma

Jasmine

QUnit

Mocha JsTestDriverBuster.JS

Chaiexpect.js

Sinon.JS

実行環境

リモートテストランナー

テスティングフレームワーク

モックライブラリ

Page 38: JavaScript Unit Test Why? What? How?

Demo•おすすめ簡単構成•Jasmine + Testem + 実ブラウザ•FizzBuzz with TDD•CI with PhantomJS

Page 39: JavaScript Unit Test Why? What? How?

ユニットテスト以外にも•カバレッジ測定•静的解析•Lint (JSHint, JSLint, Closure)•型チェック (Closure, TypeScript)•それらを支えるgruntなどなど

Page 40: JavaScript Unit Test Why? What? How?

まとめ•JSでもユニットテストは大事!•モデルのテストから始めよう!•テスト関連ツールの進化がやばい!•TDDで楽しい開発!

Page 42: JavaScript Unit Test Why? What? How?

Just Now!

Page 43: JavaScript Unit Test Why? What? How?

ありがとうございました!