QUnitを便利に使うTips
- HTML5 APIs
- UI ライブラリ
- テスト支援
- ドキュメント
- コード品質ツール
- バリデータ
- キー入力支援
- テストダブル
- ハイブリッドアプリケーション
- 継続的インテグレーション
- テストの特定のタイミングで実行させたい処理を登録する
- テスト開始時に一度だけ実行したいメソッドを登録: QUnit.config.begin
- テスト終了時に一度だけ実行したいメソッドを登録: QUnit.config.done()
- モジュール(module())の開始毎に実行したいメソッドを登録: QUnit.config.moduleStart(Function)
- モジュール(module())の終了毎に実行したいメソッドを登録: QUnit.config.moduleDone(Function)
- テスト(test(), asyncTest())の開始毎に実行したいメソッドを登録: QUnit.config.testStart(Function)
- テスト(test(), asyncTest())の終了毎に実行したいメソッドを登録: QUnit.config.testDone(Function)
- アサーション(ok(), equal(), notEqual(), deepEqual(), notDeepEqual(), strictEqual(), notStrictEqual(), throws())毎に実行したいメソッドを登録: QUnit.config.log(Function)
- 特定のテストのみグローバル汚染をチェックしないようにする
- 特定のテストをスキップする
- テスト内で使用する変数を定義する
- 参考サイト
テストの特定のタイミングで実行させたい処理を登録する
以下のメソッドにコールバックを登録します。
なお、QUnit.begin()、QUnit.done()、QUnit.moduleStart()、QUnit.moduleDone()、QUnit.testStart()、QUnit.testDone(), QUnit.log()にも同等のメソッドがありますが、
非推奨なので使用しないでください。
テスト開始時に一度だけ実行したいメソッドを登録: QUnit.config.begin
// 処理コード
});
begin()にはコールバック関数の引数はありません。
テスト終了時に一度だけ実行したいメソッドを登録: QUnit.config.done()
console.log(args) // {failed: 5, passed:5, total:10, runtime:2}
});
コールバックの引数には、テスト全体の実行結果の情報が返ってきます。
プロパティ名 | 説明 |
---|---|
failed | 失敗したテスト数 |
passed | 成功したテスト数 |
total | トータルのテスト件数 |
runtime | テストの経過時間 |
モジュール(module())の開始毎に実行したいメソッドを登録: QUnit.config.moduleStart(Function)
console.log(args.name);
});
nameからモジュール名が取得できます。
モジュール(module())の終了毎に実行したいメソッドを登録: QUnit.config.moduleDone(Function)
console.log(args);
});
コールバックの引数には、モジュール毎のテスト結果情報が返ってきます。
プロパティ名 | 説明 |
---|---|
name | モジュール名 |
failed | 失敗したテスト数 |
passed | 成功したテスト数 |
total | トータルのテスト件数 |
テスト(test(), asyncTest())の開始毎に実行したいメソッドを登録: QUnit.config.testStart(Function)
console.log(args);
});
コールバックの引数には、これから実行するテストの情報が返ってきます。
プロパティ名 | 説明 |
---|---|
name | テスト名 |
module | モジュール名 |
テスト(test(), asyncTest())の終了毎に実行したいメソッドを登録: QUnit.config.testDone(Function)
consoleog(arg);
});
コールバックの引数には、テスト結果情報が返ってきます。
プロパティ名 | 説明 |
---|---|
name | テスト名 |
module | モジュール名 |
failed | 失敗したアサートの数 |
total | 施工したアサートの数 |
アサーション(ok(), equal(), notEqual(), deepEqual(), notDeepEqual(), strictEqual(), notStrictEqual(), throws())毎に実行したいメソッドを登録: QUnit.config.log(Function)
consoleog(arg);
});
コールバックの引数には、アサートの実行結果が返ってきます。
プロパティ名 | 説明 |
---|---|
message | アサートのメッセージ |
module | モジュール名 |
name | テスト名 |
result | テスト結果(trueまたはfalse) |
特定のテストのみグローバル汚染をチェックしないようにする
QUnit.config.testStart() 内で、テスト名をチェックしてQUnit.config.noglobalsを操作します。
if (status.name === 'スタブを使ったテスト。各エラーを取得する') { // グローバル汚染のチェックをしたくないテストかを判定する
QUnit.config.noglobals = false;
} else {
QUnit.config.noglobals = true;
}
});
特定のテストをスキップする
方法は2通りあります。
① QUnit.config.filter を使う
QUnit.config.filter を使ってこのテストのみ実行する/しないを設定できます。
この方法でスキップされたテストケースは、画面に表示されません。
ただしこの方法だと、スキップしたいテストケースのタイトルには、あらかじめスキップ対象であることを示す文字列を書いておく必要があります。
② testStart()内でTestオブジェクト(QUnit.config.current)を書き換える
以下のようにtestStart()内でTestオブジェクトを書き換えればテストしないようにできます。
var current = QUnit.config.current;
if (stats.name === 'テスト1') { // 実行したくないテストかを判定する
current.callback = function() {
expect(0);
if (current.async) { // asyncTestならstart()する必要がある
start();
}
};
current.name = '<span class="module-name">'+ stats.module +'</span>: <span class="test-name">[テストをスキップしました] '+ stats.name +'</span>';
}
});
QUnit.config.filterでスキップした場合と違い、この方法でスキップしても結果として画面に表示されます。
テスト内で使用する変数を定義する
module()の第二引数でsetupとteardownをもつオブジェクトを定義できますが、このオブジェクトは各テストのコンテキストとして使用することができます。
setup: function() { ... }
hoge1: 10
});
test('test1', function() {
this.hoge1 += 5; // this.hoge1はmoduleの第二引数で指定したhoge1と同じ値を持っている
equal(this.hoge1, 15);
});
test('test2', function() {
equal(this,hoge1, 10); // テスト毎に初期化されるため、値を変更しても次のテストには影響しない
});