SlideShare a Scribd company logo
1 of 37
Download to read offline
JavaScript
テストフレームワーク
を諸々眺めてみる
みなさんの心の声・・・
お前は誰だ
ということで自己紹介
佐伯 純
・TIS株式会社というところから来ました
・R&Dとか、新規事業創りとか
・かれこれ業界11年
・Java+C++→Ruby(Rails) 最近はモバイルとか
・Agileで育てられました
  @sobeit
宣伝
出展:@IT HTML5+UXhttp://www.atmarkit.co.jp/ait/kw/jstest.html
出展:@IT Smart&Socialhttp://www.atmarkit.co.jp/fsmart/index/armobile.html
出展:@IT Smart&Socialhttp://www.atmarkit.co.jp/ait/kw/android_o2o.html
http://tech-sketch.jp/
ということで本編
なのですが・・・
正直悩みました・・・
このメンバーの中で何話せばよいのよ、、、
JavaScriptのテスト
どうしてますか?
フレームワーク使ってる?使ってない?
■うちわの話になってしまうと・・・
 まだ
   
   「何それ美味しいの?」
                 状態
今日話すこと・話さないこと
※基本、「何それ美味しいの?」と言っている人向け
■話すこと
 ・各フレームワークの簡単な特徴(ざらっと)
 ・自分達が導入を決める時に考えていること
■話さないこと
 ・各フレームワークの「深い」中身の話
 ・細かい使い方
 ・超絶テクニック的な何か
・・・
フレームワーク使ったほうがよいのは?
■JavaScriptのテストに限ったことではないですが
 −テストを繰返し実行できる
 −自動化できるようになる
 −安心してバグフィックス、リファクタリング
 −テストから仕様が見通せる(要メンテ)
 −クロスブラウザチェックとかも楽になるかも
                ・・・etc.
導入しましょう!!
としてどれ使う?
出展:Wikipedia 「ユニットテスト・フレームワーク一覧」
意外にいっぱいあります
+α
+α
いくつかのテストフレーワーク
(とか)の比較をしてみる
単独のフレームワーク
QUnit
出自
・もともとはjQuery用のテストフレームワーク
・現在はJavaScript汎用になっている
特徴
・xUnit系に近い書式
・同期/非同期サポート
・APIによる外部ツール連携が可能
・Pluginによる機能拡張が可能
・ブラウザ&Nodeなどサーバサイド
QUnit
■コード(例
module("sync");
test("syncFuncTest", 1, function(){
equal("hello, world!", syncFunc(), "return to expected data");
});
module("async");
test("asyncFuncTest", function(){
expect(2);
stop();
asyncFunc(function(message){
start();
ok(true, "call to callback function");
equal("hello, world!", message, "return to expected data");
});
});
←非同期のテストの場合
←start関数が呼ばれるまでランナーを停止
←ランナーを再開
QUnit
■外部ツール連携
Callbackを利用する
 Callback 例)
  ・Qunit.begin();
  ・Qunit.done();
  ・Qunit.log();
       ・・・
 使い方はaddons下の各実装
 を参照のこと
  phantomjsなど
■Plugin
公式サイトに載っている例
 ・Canvas
 ・JUnit Logger
 ・Qunit for Rails
 ・JsTestDriver
         ・・・
t-wadaさん作 QUnit-TAPとかも
有名
       
Jasmine
出自
・Pivotal Labsが作成
特徴
・BDDフレームワーク
・RSpec(Ruby)ライクな書式
・spy、clock mock、非同期系サポート
等のテストを容易にする多数の機能
・クライアント&Nodeなどサーバサイド
割愛!!
Mocha
出自
・Expressの作者TJ Holowaychukにより作成
特徴
・非同期系のテストをサポート
・assertion libraryを選択して利用(Chaiなど)
・TDD、BDD、exports、QUnitの書式選択可能
・レポート形式が豊富
・Node&ブラウザ
Mocha
■デフォルトはBDDスタイル
describe('calc', function() {
describe('add some num', function(){
it('1+2', function(){
...
});
});
});
■実行時指定でTDDスタイルにもできる(mocha --ui tdd 〜)
suite('calc', function(){
suite('add some num', function(){
test('1+2', function(){
assert.equal(・・・);
});
});
});
Mocha
■非同期
describe('async test', function(){
it('count exec', function(done){
myobj.tenTdsCount(function(count){
assert.equal(10000,count);
done();←doneが呼ばれるまで止まる
});
});
it(・・・)
});
hook系のメソッド(before,after,beforeEach,
afterEach)と組み合わせると、より細かい実行
制御もできる
■レポート形式
リポート形式はとても豊富で実行時に指定可
 ・Dot Matrix
 ・Spec
 ・TAP
 ・Landing Strip
 ・List
 ・Progress
 ・nyan
合わせて使う
JsTestDriver+α
出自
・Googleで作成
特徴
・1つ以上のブラウザにコマンドラインテスト実行可
・単体でもxUnit系スタイルでテスト記述可能
・QUnit,Jasmineとも簡単に連携できる
・要Java
(公式サイトより引用)
JsTestDriver
※詳しくは@IT連載をごらんください
Karma+α
出自
・Angular.jsチームが作成(元testacular)
特徴
・Test Runnerなのでフレームワークは選択
 (adapter:Jasmine,Mocha,QUnit)
・IDE対応(WebStrom,Cloud9)
・主要なCIツールとの統合が容易
・変更監視によるテストの自動実行
・要Node
番外:Capybara-webkit+Cucumber
Capybara-webkit
・Capybaraユーザのブラウザ操作をエミュレートするツール
・Capybara-webkitはドライバとしてwebkitを利用
Cubumber
・受入テスト向けに作られたツール
・ユーザ操作のfeatureを平易な言葉で記述することができる
・日本語での記述も可能
番外:Capybara-webkit+Cucumber
■feature,stepの例
feature
#language:ja
機能: ユーザー名を入力して APIから利用の可否を取得し表示する
シナリオ: ユーザー名を入力して確認を押下し NGであることを確認
前提: "http://localhost:8080/"を表示
もし "ユーザ名を入力"
かつ 確認ボタンを押下
ならば メッセージ"利用できません"が表示される
step
前提 /"(.+)"を表示/ do |url|
visit(url)
end
もし /"(.+)"を入力/ do |name|
fill_in('user', :with => name)
end
・・・ ※詳しくは@IT連載を(ry
その他(手まわりませんでした、ごめんなさい)
・Vows
・Buster.js
・・・
 Busterとか気になりますよね
どうやって選びましょう?
選択時に考えるポイント
作るものはどんなもの?
何を使って作る?
どうやって作る?
・・・
TDD?
BDD? メンバー
は?
自動化は?
自分達の開発スタイルを決めよう!!
当たり前だけどこれ重要
プロダクト自体や開発の
持続性・継続性を支える
ものという意識を持って
選ぶ
で、最後は・・・
書いてて心地良いので
いいんじゃね?
ご清聴
ありがとうございました

More Related Content

What's hot

Jasst14東北 事例発表 share
Jasst14東北 事例発表 shareJasst14東北 事例発表 share
Jasst14東北 事例発表 shareSatsuki Urayama
 
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜Koichi ITO
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーションyy yank
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN LinkingKouji Matsui
 
20181102_テスト管理を語る夕べ
20181102_テスト管理を語る夕べ20181102_テスト管理を語る夕べ
20181102_テスト管理を語る夕べKazuhiro Suzuki
 
WebサイトもモバイルアプリもMagic Podで自動化
WebサイトもモバイルアプリもMagic Podで自動化WebサイトもモバイルアプリもMagic Podで自動化
WebサイトもモバイルアプリもMagic Podで自動化Nozomi Ito
 
現場からは以上です。
現場からは以上です。現場からは以上です。
現場からは以上です。naoto teshima
 
TypeScriptをオススメする理由
TypeScriptをオススメする理由TypeScriptをオススメする理由
TypeScriptをオススメする理由Yusuke Naka
 
OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島Tomohiko Himura
 
iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?Toshio Ehara
 

What's hot (10)

Jasst14東北 事例発表 share
Jasst14東北 事例発表 shareJasst14東北 事例発表 share
Jasst14東北 事例発表 share
 
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN Linking
 
20181102_テスト管理を語る夕べ
20181102_テスト管理を語る夕べ20181102_テスト管理を語る夕べ
20181102_テスト管理を語る夕べ
 
WebサイトもモバイルアプリもMagic Podで自動化
WebサイトもモバイルアプリもMagic Podで自動化WebサイトもモバイルアプリもMagic Podで自動化
WebサイトもモバイルアプリもMagic Podで自動化
 
現場からは以上です。
現場からは以上です。現場からは以上です。
現場からは以上です。
 
TypeScriptをオススメする理由
TypeScriptをオススメする理由TypeScriptをオススメする理由
TypeScriptをオススメする理由
 
OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島
 
iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?iPhoneアプリを Javaで書くよ?
iPhoneアプリを Javaで書くよ?
 

Similar to Java script testing framework for around html5 studies-

Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)NTT DATA OSS Professional Services
 
IT関係の認定試験と取得費用について
IT関係の認定試験と取得費用についてIT関係の認定試験と取得費用について
IT関係の認定試験と取得費用についてYoshitake Takata
 
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話Nan Zhang
 
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみようMori Shingo
 
ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03Daiki Maekawa
 
鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料Takashi Aoe
 
IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出
IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出
IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出VOYAGE GROUP
 
業務系WebアプリケーションがStrutsから旅立つ日
業務系WebアプリケーションがStrutsから旅立つ日業務系WebアプリケーションがStrutsから旅立つ日
業務系WebアプリケーションがStrutsから旅立つ日Mitsuru Ogawa
 
チャットボットの自然言語処理
チャットボットの自然言語処理チャットボットの自然言語処理
チャットボットの自然言語処理Yoshitaka Seo
 
HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話suno88
 
一部のWebアクセスだけ回線を切り替える方法
一部のWebアクセスだけ回線を切り替える方法一部のWebアクセスだけ回線を切り替える方法
一部のWebアクセスだけ回線を切り替える方法Yoshitake Takata
 
スクレイピングその後
スクレイピングその後スクレイピングその後
スクレイピングその後Tomoki Hasegawa
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについてMasahito Zembutsu
 
働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソードShohei Okada
 
xR Developerなら知っておきたいカメラの基礎知識
xR Developerなら知っておきたいカメラの基礎知識xR Developerなら知っておきたいカメラの基礎知識
xR Developerなら知っておきたいカメラの基礎知識Satoshi Maemoto
 
JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜
JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜
JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜Masakazu Muraoka
 

Similar to Java script testing framework for around html5 studies- (20)

Electron を知る
Electron を知るElectron を知る
Electron を知る
 
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
 
Roo
RooRoo
Roo
 
JSつまみぐい
JSつまみぐいJSつまみぐい
JSつまみぐい
 
IT関係の認定試験と取得費用について
IT関係の認定試験と取得費用についてIT関係の認定試験と取得費用について
IT関係の認定試験と取得費用について
 
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話
[JJUG CCC 2018 Spring LT Speech]WEBアプリケーションの性能問題を診断する話
 
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
2010-10-2 FxUG 名古屋勉強会 HTML5で遊んでみよう
 
ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03
 
鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料鹿駆動勉強会 青江発表資料
鹿駆動勉強会 青江発表資料
 
IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出
IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出
IT業界とソフトウェア技術者を取り巻く今日の様相と荒波の将来への船出
 
業務系WebアプリケーションがStrutsから旅立つ日
業務系WebアプリケーションがStrutsから旅立つ日業務系WebアプリケーションがStrutsから旅立つ日
業務系WebアプリケーションがStrutsから旅立つ日
 
チャットボットの自然言語処理
チャットボットの自然言語処理チャットボットの自然言語処理
チャットボットの自然言語処理
 
HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話
 
Groovyコンファレンス
GroovyコンファレンスGroovyコンファレンス
Groovyコンファレンス
 
一部のWebアクセスだけ回線を切り替える方法
一部のWebアクセスだけ回線を切り替える方法一部のWebアクセスだけ回線を切り替える方法
一部のWebアクセスだけ回線を切り替える方法
 
スクレイピングその後
スクレイピングその後スクレイピングその後
スクレイピングその後
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
 
働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード
 
xR Developerなら知っておきたいカメラの基礎知識
xR Developerなら知っておきたいカメラの基礎知識xR Developerなら知っておきたいカメラの基礎知識
xR Developerなら知っておきたいカメラの基礎知識
 
JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜
JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜
JavaScriptで ごく普通にhttp通信をする 〜esp8266+espruinoでhttp getリクエストをするテスト〜
 

Java script testing framework for around html5 studies-