Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
uupaa edited this pageOct 24, 2015 ·8 revisions

WebModule にはテストランナーが付属しており、Browser, WebWorkers, Node.js, NW.js, Electron, iPhone Simurator, Travic CI といった様々な環境で動作します。
ユニットテスト用のコードは test/testcase.js に記述します。

コード( lib/MyExample.js )を修正したら、品質の確認とテストを行います。

npm start で簡易httpサーバを起動し、その後にnpm t とタイプすることでビルドとテストが行われます。テスト対象はlib/MyExample.jsrelease/MyExample.*.min.js です。

ブラウザ用のテストページはhttp://localhost:8000/MyExample.js/test/browser/index.html にあります。

testcase.js

testcase.js のひな形は以下のようになっています。

varModuleTestMyExample=(function(global){// テストする環境を指定する場合は、 以下のオプションを ture または false にしますvartest=newTest("MyExample",{disable:false,// ユニットテスト全体を無効化しますbrowser:true,// Browser のテストを有効にしますworker:true,// WebWorkers のテストを有効にしますnode:true,// Node.js  のテストを有効にしますnw:true,// nw.js  のテストを有効にしますel:true,// electron (render process) のテストを有効にしますbutton:true,// 個別テスト用のボタンを HTML に追加しますboth:true,// minify 前のコードと minify 後のコードの両方をテストしますignoreError:false,// true を指定するとエラーが発生してもテストを止めません(エラーを無視します)callback:function(){// テスト終了でコールバックします},errorback:function(error){// テスト失敗でコールバックします}}).add([testMyExample_concat,]);if(IN_BROWSER||IN_NW||IN_EL){test.add([// browser and node-webkit test]);}elseif(IN_WORKER){test.add([// worker test]);}elseif(IN_NODE){test.add([// node.js and io.js test]);}// --- test cases ------------------------------------------functiontestMyExample_concat(test,pass,miss){varresult={0:newMyExample().concat("a")==="a",// true1:newMyExample("b").concat("b")==="bb"// true};if(/false/.test(JSON.stringify(result,null,2))){test.done(miss());}else{test.done(pass());}}returntest.run();})(GLOBAL);

特定の環境用にテストを追加する場合は、以下のようにします。

if(IN_BROWSER){test.add([testMyExample_newTest,<--追加]);}functiontestMyExample_newTest(test,pass,miss){if(テスト成功){test.done(pass());}else{test.done(miss());}}

テストの成功でtest.done(pass()) を実行してください。テストの失敗でtest.done(miss()) を実行してください。

Async test

同期処理と非同期処理の両方をテストできます。

functiontestMyExample_async(test,pass,miss){setTimeout(function(){test.done(pass());},1000);}

テストが行われる順番について

最初にtest/node/index.js による Node.js のテストが走り、
次にtest/browser/index.htmltest/browser/worker.js を使ったブラウザのテストが始まります。

テストは最初lib/MyExample.js に対して node → browser → worker の順番で行い、次にrelease/MyExample.*.min.js に対して行います。
テスト成功でブラウザの画面が緑に、失敗で赤くなります。
また、Closure Compiler によるMyExample.*.min.js のコンパイルに失敗している場合も赤くなります。

Closure Compiler に対応するには

Closure Compiler の ADVANCED_OPTIMIZATIONS MODE に対応できていないコードはコンパイルに失敗します。恐らくはリネームが原因です。

たとえば、
function SomeAPI() { return { foo: 123 }; } はエラーになります。
function SomeAPI() { return { "foo": 123 }; } にしてください。

この場合は、恐らくfoo がコンパイラにより別の短い名前(ab)にされています。
リネームされたくない名前やプロパティはglobal.MyExample.hoge = 1; の形ではなくglobal["MyExample"]["hoge"] = 1; のように保護します。

MyExample.*.min.js を DevTools で開き、Minify されているコードを展開({ }をクリック)し、リネーム状況を確認することができます。

Clone this wiki locally

[8]ページ先頭

©2009-2025 Movatter.jp