| Version 3 (modified by kyo_ago, 4 years ago) |
|---|
Test.Sweets
簡易javascript testframework Test.Sweets
Download
svn co http://svn.coderepos.org/share/lang/javascript/Test.Sweets/Sweets.js
License
Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
Concept
- 簡単
- 基本のmethodは一つ
- 記述は基本的にコピペでOK
- すぐ使える
- ソースのコメント部分にテストを記述(doctest)
- テストの名前を考える必要なし
- 後付け可能
- 無名関数のテストをサポート
- callback関数のテストをサポート(実装中)
Documentation
使い方
以下のコードが書かれたtarget.jsというファイルをテストする場合を想定します。
var result = (function (arg) {
return arg * arg;
})(1);
1. target.jsに以下の形式でコメントを追加します。
/*###=> var func = __CODE__
$$$(func(1) === 1);
$$$(func(2) === 4);
*/
var result = (function (arg) {
return arg * arg;
})(1);
2. target.jsと同じドメイン下に以下のhtmlファイル設置します
<html><head><title></title></head><body>
<script type="text/javascript" src="http://svn.coderepos.org/share/lang/javascript/Test.Sweets/Sweets.js"></script>
<script type="text/javascript">
window.Sweets.file('target.js?' + (new Date).getTime());
</script>
</script></body></html>
3. テスト対象のブラウザでhtmlファイルを表示します
失敗した場合のみconsole.warnにエラーを表示します
特殊コメント
- テストコードの設置
/*###=> */
このコメントの次に現れたfunctionをコメント内の__CODE__に置き換えます。
テストコードの設置された箇所を記録し、すべての定義されるまで(定義された箇所が実行されるまで)テストの開始を待ちます。
- テスト実行時のみ無視するコードの記述
//###--- //---###
「###---」、「---###」で囲まれた箇所はテスト実行前に削除されます。
(上記の場合、「//」のみ残ることになります)
実際のサーバへの投稿等を隠す場合に使用できます。
- テスト実行時のみ実行するコードの記述
//###
「//###」のあとに書かれたコードはテスト実行時のみ実行します。
仕様上テストコードを実行する前にテストコードが記述された部分が実行されている必要があるため、単純に読み込むだけでは実行されないテストコードを実行するために使用できます。
- callback関数のテスト(実装中)
/*###<= */
このコメントの次に現れたfunctionをコメント内のfunctionに置き換えます。
次のような形式でのテストを想定しています。
/*###<=
___({}, ['true']);
*/
$.get('/api', function (data) {
if (data == 'true') alert('true');
});
___は第一引数にthisに含まれているべきプロパティ、第二引数にargumentsに含まれているべき値を指定します。
(指定されていない値が含まれている場合は無視します)
テスト関数
- $$$
メインのテスト関数です。
「/*###=> */」内に「$$$」記述すると以下のように展開されます。
;window.Sweets._line_number = 行番号;Sweets.$$$
第一引数に真偽値、第二引数にテスト名(optinal)を受け取ります。
$$$のaliasとして$_$も定義されています。
- ___(実装中)
callbackのテスト用関数です。
特殊リテラル
- __LINE__
行番号の数値リテラルに置き換えます。
/*###=> alert(typeof __LINE__); // => Numberとなります */
制限事項
「/」演算子と正規表現の開始が判別できていないため、以下のような記述で解析に失敗します。
var hoge = 5 / 1; /* 「 1; 」が正規表現リテラルとして解析されます */
「/」演算子を使用する場合、同じ行に「/」を記述しないようご注意ください。
(ただ、ブロックコメント以外であれば大きな問題はないと思います)
実装
window.Sweets.fileの第一引数を$.getで取得し、その中身を正規表現で置き換えたあとにevalしています。
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)