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しています。