私はまったく同じ問題に取り組んでいます。開発者はテストするHTML5アプリを私に渡したので、テスト用にコードを変更することはできません。私はqunitとsinonをsinon-qunitと一緒に使うことに決めました。
私のようなnewb-to-JavaScriptユニットテストでは、ほとんどのものが暗黙環境ではないと思われるので、私はsinonのドキュメントとWeb上のさまざまなサンプルを使っていました。下のコードは完全なページなので、混乱の余地はありません。
私が呼び出さなければならない機能はcaller()
です。これは開発者のコードにあるため、stubme()
については何もできません。しかし、私はsinonstub()
をテストコードに追加することができます。しかし、それをsinonと連動させるにはどうすればいいですか? sinonのドキュメントは本当に私をしばらく混乱させましたが、以下は簡単な解決策です。 stub4stubmeオブジェクトを使用してスタブアクションを制御し、スタブコールの状況に関する情報を取得することもできます。
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<link rel="stylesheet" href="qunit-1.12.0.css" type="text/css" media="screen" />
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<script src="sinon-1.7.3.js"></script>
<script src="qunit-1.12.0.js"></script>
<script src="sinon-qunit-0.8.0.js"></script>
<script>
// Dev code in another file
function stubme() {
return "stubme";
}
function caller() {
return "caller " + stubme();
}
// End of dev code
var sinonstub = function() {
return "u haz bin stubbed";
};
test("Stubbing global environments", function() {
equal(caller(), "caller stubme");
var stub4stubme = this.stub(window, "stubme", sinonstub);
equal(caller(), "caller u haz bin stubbed");
ok(stubme.called);
});
</script>
</body>
</html>
このケースは異なっていますWindow.confirm()はグローバル関数ではありません。 –