He estado trabajando exactamente en el mismo problema. Los desarrolladores me dieron una aplicación HTML5 para probar, así que por supuesto no puedo cambiar su código para probar. Decidí usar qunit y sinon, junto con sinon-qunit.
Para una prueba de la unidad newb to JavaScript como yo, me estaba volviendo loco con la documentación de sinon y varios ejemplos en la web, ya que la mayoría parece por un entorno implícito que no se menciona. El siguiente código es una página completa, por lo que espero que no quede nada por confusión.
La función a la que tengo que llamar es caller()
y no puedo hacer nada con stubme()
porque está en el código del desarrollador. Sin embargo, puedo agregar sinonstub()
en mi código de prueba. Pero, ¿cómo lograr que funcione con sinon? La documentación de sinon realmente me confundió por un tiempo, pero a continuación está la solución simple. El objeto stub4stubme se puede usar para controlar la acción de stub y también para obtener información sobre lo que está sucediendo con las llamadas stub.
<!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>
Este caso es diferente como Window.confirm() no es una función global. –