Я работал над точно такой же проблемой. Разработчики дали мне приложение HTML5 для тестирования, поэтому, конечно, я не могу изменить их код для тестирования. Я решил использовать qunit и sinon вместе с sinon-qunit.
Для модульного тестирования новичка в JavaScript, как я, я сходил с ума по документации sinon и различным примерам в Интернете, поскольку большая часть этого представляется для подразумеваемой среды, которая не упоминается. Приведенный ниже код является полной страницей, поэтому я надеюсь, что ничего не останется для путаницы.
Функция, которую я должен вызвать - 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>