J'écris des tests Jasmine pour certains scripts JavaScript hérités qui produisent une alerte ou une confirmation à certains moments du code.
Au moment où l'alerte apparaît, elle interrompt l'exécution dans le navigateur, ce qui m'oblige à appuyer sur OK avant de continuer.
Je suis sûr qu'il me manque quelque chose, mais existe-t-il un moyen de simuler une alerte?
Mieux encore, est-il possible de savoir quel était le message de l'alerte?
Merci de votre aide.
Vous créez simplement un espion, étonnamment avec createSpy()
, pour simuler la fonction contenant l'alerte. Donc, vous pouvez faire quelque chose comme ça:
beforeEach(function() {
functionWithAlert = jasmine.createSpy("functionWithAlert");
functionWithAlert("called as usual");
});
Vous pouvez aussi faire cela pour retourner quelque chose
oldFunctionWithAlert = jasmine.createSpy("oldFunctionWithAlert() spy").andCallFake(function() {
console.log("Doing some testing");
return "Test";
});
Sur une note de côté, je vous suggère de remplacer l'alerte si possible par des alternatives moins perturbatrices. Il existe une tonne d'options comme Dialogue de l'interface utilisateur de JQuery .
spyOn(window, 'alert');
. . .
expect(window.alert).toHaveBeenCalledWith('a message');
var oldalert = alert;
alert = jasmine.createSpy();
// do something
expect(alert).toHaveBeenCalledWith('message')
alert = oldalert
Un autre moyen consiste à le faire dans un assistant de spécification.
window.alert = function(){return;};