-
Notifications
You must be signed in to change notification settings - Fork 8
UnitTest
uupaa edited this page May 25, 2015
·
8 revisions
WebModule にはテストランナーが付属しており、Browser, WebWorkers, Node.js, nw.js, iPhone Simurator, Travic CI といった様々な環境で動作します。
ユニットテスト用のコードは test/testcase.js に記述します。
コード( lib/MyExample.js )を修正したら、品質の確認とテストを行います。
npm start で簡易httpサーバを起動し、その後に npm t とタイプすることでビルドとテストが行われます。
テスト用のページには http://localhost:8000/MyExample.js/test/index.html からアクセスできます。
testcase.js のひな形は以下のようになっています。
var ModuleTestMyExample = (function(global) {
// テストする環境を指定する場合は、 以下のオプションを ture または false にします
var test = new Test("MyExample", {
disable: false, // ユニットテスト全体を無効化します
browser: true, // Browser のテストを有効にします
worker: true, // WebWorkers のテストを有効にします
node: true, // Node.js のテストを有効にします
nw: true, // nw.js のテストを有効にします
button: true, // 個別テスト用のボタンを HTML に追加します
both: true, // minify 前のコードと minify 後のコードの両方をテストします
ignoreError:false, // true を指定するとエラーが発生してもテストを止めません(エラーを無視します)
callback: function() { // テスト終了でコールバックします
},
errorback: function(error) { // テスト失敗でコールバックします
}
}).add([
testMyExample_concat,
]);
if (IN_BROWSER || IN_NW) {
test.add([
// browser and node-webkit test
]);
} else if (IN_WORKER) {
test.add([
// worker test
]);
} else if (IN_NODE) {
test.add([
// node.js and io.js test
]);
}
// --- test cases ------------------------------------------
function testMyExample_concat(test, pass, miss) {
var result = {
0: new MyExample( ).concat("a") === "a", // true
1: new MyExample("b").concat("b") === "bb" // true
};
if ( /false/.test(JSON.stringify(result, null, 2)) ) {
test.done(miss());
} else {
test.done(pass());
}
}
return test.run();
})(GLOBAL);特定の環境用にテストを追加する場合は、以下のようにします。
if (IN_BROWSER) {
test.add([
testMyExample_newTest, <-- 追加
]);
}
function testMyExample_newTest(test, pass, miss) {
if (テスト成功) {
test.done(pass());
} else {
test.done(miss());
}
}テストの成功で test.done(pass()) を実行してください。またテストの失敗で test.done(miss()) を実行してください。
同期処理と非同期処理の両方をテストできます。
function testMyExample_async(test, pass, miss) {
setTimeout(function() {
test.done(pass());
}, 1000);
}