Top Banner
QUnit 再入門 (Version 1.10.0 編) 121212日水曜日
33

Qunit再入門 (Version 1.10.0 編)

Jun 04, 2015

Download

Documents

Koji Nakamura
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Qunit再入門 (Version 1.10.0 編)

QUnit 再入門(Version 1.10.0 編)

12年12月12日水曜日

Page 2: Qunit再入門 (Version 1.10.0 編)

自己紹介

@kozy4324

JS/AS3.0でフロントエンド開発

最近はObjective-C

12年12月12日水曜日

Page 3: Qunit再入門 (Version 1.10.0 編)

QUnitとは?

使い方(ミニマム)

使い方(ケーススタディ)

12年12月12日水曜日

Page 4: Qunit再入門 (Version 1.10.0 編)

QUnitとは?

使い方(ミニマム)

使い方(ケーススタディ)

12年12月12日水曜日

Page 5: Qunit再入門 (Version 1.10.0 編)

http://qunitjs.com/

12年12月12日水曜日

Page 6: Qunit再入門 (Version 1.10.0 編)

JavaScriptのユニットテスティングフレームワーク

jQueryの開発に利用されている

MITライセンス

QUnitとは?

12年12月12日水曜日

Page 7: Qunit再入門 (Version 1.10.0 編)

特徴シンプルなAPIWebブラウザ上で動くJSがメインターゲットHTMLレポート非同期処理テストのサポートDOM fixtureNode.jsやRhino上でも動く

12年12月12日水曜日

Page 8: Qunit再入門 (Version 1.10.0 編)

QUnitとは?

使い方(ミニマム)

使い方(ケーススタディ)

12年12月12日水曜日

Page 9: Qunit再入門 (Version 1.10.0 編)

HTMLを作成qunit.jsとqunit.cssを読み込むテスト対象のjsを読み込むテストコードのjsを読み込むid="qunit"の要素を追加

前準備

12年12月12日水曜日

Page 10: Qunit再入門 (Version 1.10.0 編)

サンプルHTML<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>QUnit Example</title> <link rel="stylesheet" href="qunit-1.10.0.css"> <script src="qunit-1.10.0.js"></script> <script src="MyClass.js"></script> <script src="MyClassTest.js"></script></head><body> <div id="qunit"></div></body></html>

テスト結果がこの要素に出力される

titileは任意だが設定推奨テスト結果のマークを付与してくれる

12年12月12日水曜日

Page 11: Qunit再入門 (Version 1.10.0 編)

API(ミニマム)test()Assertok()equal(), notEqual()deepEqual(), notDeepEqual()strictEqual(), notStrictEqual()

12年12月12日水曜日

Page 12: Qunit再入門 (Version 1.10.0 編)

これだけ知ってればテスト書けます

12年12月12日水曜日

Page 13: Qunit再入門 (Version 1.10.0 編)

書いてみるtest("第1引数にtest名を記述", function() { var result = myFunc1(); ok(result, "resultがtrueでテストをパス");});

test("論理的な単位でテストをまとめるとよい", function() {

var result = myFunc2(); equal(result, "hoge", "2値の比較はequalを利用");});

test("オブジェクトの比較はdeepEqual()", function() {

var obj = myFunc3(); deepEqual(obj, {a:1, b:{c:1}}, "再帰的にチェック可能");});

12年12月12日水曜日

Page 14: Qunit再入門 (Version 1.10.0 編)

equal()とstrictEqual()

equal()は「==」で比較

strictEqual()は「===」で比較

JSで 1 == "1" は true なのよ

12年12月12日水曜日

Page 15: Qunit再入門 (Version 1.10.0 編)

QUnitとは?

使い方(ミニマム)

使い方(ケーススタディ)

12年12月12日水曜日

Page 16: Qunit再入門 (Version 1.10.0 編)

Q. 共通処理をまとめたい

test("test 1", function() { var myInstance = new MyClass(); equal(myInstance.getHoge(), "hoge");});

test("test 2", function() { var myInstance = new MyClass(); equal(myInstance.getFoo(), "foo");});

test("test 3", function() { var myInstance = new MyClass(); equal(myInstance.getBar(), "bar");});

12年12月12日水曜日

Page 17: Qunit再入門 (Version 1.10.0 編)

A. module()とsetup/teardownmodule("module A", { setup: function() { this.myInstance = new MyClass(); }});

test("test 1", function() { equal(this.myInstance.getHoge(), "hoge");});

test("test 2", function() { equal(this.myInstance.getFoo(), "foo");});

test("test 3", function() { equal(this.myInstance.getBar(), "bar");});

12年12月12日水曜日

Page 18: Qunit再入門 (Version 1.10.0 編)

Q. Assert回数をチェックしたい

test("test 1", function() { // myMethodはコールバック関数を受け取る myMethod(function() { ok(true); });

// コールバック関数が実行されないとこのテストはパスする // コールバックされたことをテストしたい...});

12年12月12日水曜日

Page 19: Qunit再入門 (Version 1.10.0 編)

A. expect()

test("test 1", function() { expect(1); myMethod(function() { ok(true); }); // Assertされないとfail

});

test("test 2", 1, function() { myMethod(function() { ok(true); }); // test()の第2引数にも指定できる});

12年12月12日水曜日

Page 20: Qunit再入門 (Version 1.10.0 編)

Q. 例外の振る舞いをチェックしたい

test("test 1", function() { myFunc(); // myFunc()が例外をthrowするかどうか // どう書く...?});

12年12月12日水曜日

Page 21: Qunit再入門 (Version 1.10.0 編)

A. throws()

test("test 1", function() { throws(function() { myMethod(); }, "myMethodが例外をthrowするとこのテストはパスする");});

test("test 1", function() { throws(function() { throw new CustomError() }, CustomError, // 第2引数にはErrorクラス or RegExp "throwされる例外の型や含まれるメッセージでもテスト可能");});

12年12月12日水曜日

Page 22: Qunit再入門 (Version 1.10.0 編)

Q. 非同期処理のテストがしたい

test("test 1", function() { expect(1); jQuery.get("data.json", function(data) { equal(data.hoge, "hoge"); });});

test("test 2", function() { ok(true);});

// このテストは正しく実行されない// "test 1"のAssertが実行される前に"test 2"が開始される...

12年12月12日水曜日

Page 23: Qunit再入門 (Version 1.10.0 編)

A. start(), stop()test("test 1", function() { expect(1); jQuery.get("data.json", function(data) { equal(data.hoge, "hoge"); start(); // start()で次テスト実行が開始される }); stop(); // stop()で次テスト実行が保留される});

asyncTest("test 2", function() { expect(1); jQuery.get("data.json", function(data) { equal(data.hoge, "hoge"); start(); }); // asyncTestにするとstop()を省略できる});

12年12月12日水曜日

Page 24: Qunit再入門 (Version 1.10.0 編)

Q. テスト毎にDOMクリアしたい

test("test 1", function() { document.getElementById("div").innerHTML = html; // テスト...});

test("test 2", function() { document.getElementById("div").innerHTML = html; // テスト...});

test("test 3", function() { document.getElementById("div").innerHTML = html; // テスト...});

12年12月12日水曜日

Page 25: Qunit再入門 (Version 1.10.0 編)

A. id="qunit-fixture"な要素を利用すると幸せになれる

/** * id="qunit-fixture"の要素はテスト毎に復元される * (config.fixtureに復元用のinnerHTMLが保持される) */test("test 1", function() { document.getElementById("qunit-fixture").innerHTML = "hi"; notEqual( document.getElementById("qunit-fixture").innerHTML, QUnit.config.fixture);});

test("test 2", function() { equal( document.getElementById("qunit-fixture").innerHTML, QUnit.config.fixture);});

12年12月12日水曜日

Page 26: Qunit再入門 (Version 1.10.0 編)

Q. 特定のテストだけ実行したい

12年12月12日水曜日

Page 27: Qunit再入門 (Version 1.10.0 編)

A. HTMLレポート画面から特定テスト実行の操作が可能

モジュール毎の絞り込み実行が可能

カラムダブルクリックで該当テストのみ再実行

12年12月12日水曜日

Page 28: Qunit再入門 (Version 1.10.0 編)

Q. 変数のグローバル汚染を検出したい

12年12月12日水曜日

Page 29: Qunit再入門 (Version 1.10.0 編)

A. 変数グローバル汚染チェックモードがある

選択するとテスト再実行汚染があれば該当テストがfailする

12年12月12日水曜日

Page 30: Qunit再入門 (Version 1.10.0 編)

Q. Mockを利用した振る舞いのテストをしたい

12年12月12日水曜日

Page 31: Qunit再入門 (Version 1.10.0 編)

A. Sinon.JSのsinon-qunitを利用(別プロダクトなので説明割愛)

12年12月12日水曜日

Page 32: Qunit再入門 (Version 1.10.0 編)

おまけ API変更点Assert APICommonJS Unit Testing互換にequals → equalsame → deepEqualraises → throws

Assertのスコープ推奨はtestコールバックの引数test("test", function(assert) { assert.ok(ok);});

12年12月12日水曜日

Page 33: Qunit再入門 (Version 1.10.0 編)

Let's QUnit !!!

12年12月12日水曜日