Blog
HTML5資料室 » QUnitを便利に使うTips

QUnitを便利に使うTips

Last modified by masaru-yokoyama on 2013/07/29, 14:22

テストの特定のタイミングで実行させたい処理を登録する

以下のメソッドにコールバックを登録します。
なお、QUnit.begin()QUnit.done()QUnit.moduleStart()QUnit.moduleDone()QUnit.testStart()QUnit.testDone(), QUnit.log()にも同等のメソッドがありますが、
非推奨なので使用しないでください。

テスト開始時に一度だけ実行したいメソッドを登録: QUnit.config.begin

QUunit.config.begin.push(function() {
 // 処理コード
});

begin()にはコールバック関数の引数はありません。

テスト終了時に一度だけ実行したいメソッドを登録: QUnit.config.done()

QUnit.config.done.push(function(args) {
    console.log(args) // {failed: 5, passed:5, total:10, runtime:2}
});

コールバックの引数には、テスト全体の実行結果の情報が返ってきます。

プロパティ名説明
failed失敗したテスト数
passed成功したテスト数
totalトータルのテスト件数
runtimeテストの経過時間

モジュール(module())の開始毎に実行したいメソッドを登録: QUnit.config.moduleStart(Function)

QUnit.config.moduleStart.push(function(args) {
    console.log(args.name);
});

nameからモジュール名が取得できます。

モジュール(module())の終了毎に実行したいメソッドを登録: QUnit.config.moduleDone(Function)

QUnit.config.moduleDone.push(function(args) {
    console.log(args);
});

コールバックの引数には、モジュール毎のテスト結果情報が返ってきます。

プロパティ名説明
nameモジュール名
failed失敗したテスト数
passed成功したテスト数
totalトータルのテスト件数

テスト(test(), asyncTest())の開始毎に実行したいメソッドを登録: QUnit.config.testStart(Function)

QUnit.config.testStart.push(function(args) {
    console.log(args);
});

コールバックの引数には、これから実行するテストの情報が返ってきます。

プロパティ名説明
nameテスト名
moduleモジュール名

テスト(test(), asyncTest())の終了毎に実行したいメソッドを登録: QUnit.config.testDone(Function)

QUnit.config.testDone.push(function(args) {
    consoleog(arg);
});

コールバックの引数には、テスト結果情報が返ってきます。

プロパティ名説明
nameテスト名
moduleモジュール名
failed失敗したアサートの数
total施工したアサートの数

アサーション(ok(), equal(), notEqual(), deepEqual(), notDeepEqual(), strictEqual(), notStrictEqual(), throws())毎に実行したいメソッドを登録: QUnit.config.log(Function)

QUnit.config.log.push(function(args) {
    consoleog(arg);
});

コールバックの引数には、アサートの実行結果が返ってきます。

プロパティ名説明
messageアサートのメッセージ
moduleモジュール名
nameテスト名
resultテスト結果(trueまたはfalse)

特定のテストのみグローバル汚染をチェックしないようにする

QUnit.config.testStart() 内で、テスト名をチェックしてQUnit.config.noglobalsを操作します。

QUnit.testStart(function(status) {
if (status.name ===  'スタブを使ったテスト。各エラーを取得する') { // グローバル汚染のチェックをしたくないテストかを判定する
QUnit.config.noglobals = false;
} else {
QUnit.config.noglobals = true;
}
});

特定のテストをスキップする 

方法は2通りあります。

QUnit.config.filter を使う

QUnit.config.filter を使ってこのテストのみ実行する/しないを設定できます。
この方法でスキップされたテストケースは、画面に表示されません。

QUnit.config.filter = '!h5.core.expose()を実行'; // 値の先頭に「!」を付けると「!」以降の文字列が含まれるテストを実行しないようにできる

ただしこの方法だと、スキップしたいテストケースのタイトルには、あらかじめスキップ対象であることを示す文字列を書いておく必要があります。

testStart()内でTestオブジェクト(QUnit.config.current)を書き換える

以下のようにtestStart()内でTestオブジェクトを書き換えればテストしないようにできます。

QUnit.testStart(function(stats) {
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をもつオブジェクトを定義できますが、このオブジェクトは各テストのコンテキストとして使用することができます。

module('module1', {
    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); // テスト毎に初期化されるため、値を変更しても次のテストには影響しない
});

参考サイト

- qunitjs.com
- JavaScript QUnit - kozy.hetemi.jp


Copyright (C) 2012-2017 NS Solutions Corporation, All Rights Reserved.