web-dev-qa-db-fra.com

Test des alertes javascript avec Jasmine

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.

24
pixelmatt

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

0
Vidya
spyOn(window, 'alert');
. . . 
expect(window.alert).toHaveBeenCalledWith('a message');
77
jolySoft
var oldalert = alert;
alert = jasmine.createSpy();
// do something
expect(alert).toHaveBeenCalledWith('message')
alert = oldalert
3
Yaroslav

Un autre moyen consiste à le faire dans un assistant de spécification.

window.alert = function(){return;};
1
Pablo Jomer