mocha の checkLeaks と globals の使い方
2013年6月20日
mocha ドキュメントの Browser support の項に、ブラウザで mocha を使う場合の例として以下の HTML が貼ってありますが、
その中に書いてある checkLeaks と globals の挙動を調べました。
その中に書いてある checkLeaks と globals の挙動を調べました。
<html>
<head>
<meta charset="utf-8">
<title>Mocha Tests</title>
<link rel="stylesheet" href="mocha.css" />
</head>
<body>
<div id="mocha"></div>
<script src="jquery.js"></script>
<script src="expect.js"></script>
<script src="mocha.js"></script>
<script>mocha.setup('bdd')</script>
<script src="test.array.js"></script>
<script src="test.object.js"></script>
<script src="test.xhr.js"></script>
<script>
mocha.checkLeaks();
mocha.globals(['jQuery']);
mocha.run();
</script>
</body>
</html>
今回の話は全てブラウザ内で実行した場合の話になります。
mocha.checkLeaks()
これは、「テスト前後でグローバル変数が増加していたら、エラーとみなす」オプションです。
デフォルトは false でこれを実行すると true になります。
デフォルトは false でこれを実行すると true になります。
注意として、テスト実行前後の差分で判定するので、
テスト前の、定義時に発生したものは判定してくれません。
mocha.globals()
これは、上記の checkLeaks の判定から除外する変数名を設定します。
例えば、mocha.globals([‘leak1’, ‘leak2’]); という設定をすれば、
window.leak1 と window.leak2 は判定から除外します。
特に注意すべき点として、
その時点で定義されている変数を設定してしまうと、判定が壊れます。
具体的には、重複した分ひとつにつき、リーク1つを見逃してしまうようになっています。
意図したものかはわからないのですが、重複チェックをしてくれないんすよねー
詳細は、内部の globals と checkGlobals などを見てもらうとわかるので、
興味が有る方はそちらを参照してください。
という訳で、mocha ドキュメントが間違ってるという話
mocha.globals(['jQuery']); の時点で window.jQuery は存在するので、
リークをひとつ見逃すようになってしまっています。
リークをひとつ見逃すようになってしまっています。
この場合、globals は実行する必要ありませぬ。
くそう..