Question

Note:à l'aide de la MOYENNE de Moka, de Express, Angulaire, et le Nœud de l'application

Je suis en train d'apprendre comment faire e2e test et j'ai construit une petite application à tester.Une chose qu'il ne est chaque fois que vous effectuez une action, il affiche un message pour les X secondes et puis s'en va.Je suis en utilisant angulars $timeout.

$scope.displayMessage = function(messageIn, borderColor){

        var timeoutTime = 5000; //clear the message after x seconds
        $scope.borderType = "1px solid " + borderColor;

        $scope.messages = messageIn;

        $scope.visibility = true; //reveal the div
        $timeout.cancel($scope.timeout); //cancel any previous timers

        $scope.timeout = $timeout(function(){ //Set and start new timer.

            $scope.visibility = false;
            $scope.messages = "";
        }, timeoutTime);
    };

Maintenant, je vais essayer de tester ça.Actuellement, j'ai

 it("should display message", function(done){

        var button = element(by.id("getStudents"));

        console.log("clicking button");

        var messageElem = element(by.binding("messages"));

        button.click().then(function () {

            console.log("button clicked");

            messageElem.getText().then(function(text){

               console.log("The text should equal: " + text);
            });

            //expect(messageElem.getText()).toBe("Students retrieved");
            console.log("test executed");

        });

        done();
    });

Mais il semble être en attente jusqu'à ce que après le délai d'attente pour faire le messageElem.getText().then() à quel point la div a été effacé.Le "test exécuté" journal d'impression pendant le délai d'attente, mais pas le "getText()" de la fonction.Je suppose que cela a quelque chose à voir avec angulars cycle de vie?

Oh, et voici le code HTML (en Jade format)

 div(ng-model="messages",ng-show = "visibility", style = "clear:both;padding-top:3em;border:{{borderType}};text-align:center;")

    h3
        {{messages}}

ignorer mon style, j'ai été trop paresseux pour faire un fichier css pour cette application de test :D

Était-ce utile?

La solution

Essayez d'utiliser $intervalle au lieu de $timeout.

Le rapporteur tente d'attendre jusqu'à ce que la page est complètement chargée avant de l'exécution de toute action (tels que la recherche d'un élément ou d'envoi d'une commande pour un élément).

Lire ici.Détails ici.

Autres conseils

J'ai piraté autour de cela, utilisez le code ci-dessous bloc.J'ai eu une barre de notification à partir d'un 3ème partie nœud package (ng-notifications-bar) qui a utilisé $timeout au lieu de $intervalle, mais il faut s'attendre à ce que le texte de l'erreur a été d'une certaine valeur.J'ai mis a utilisé une courte nuit de sommeil() pour permettre à la barre de notification animation, de commutation de ignoreSynchronization vrai, alors Rapporteur de ne pas attendre le $timeout à la fin, de mettre mon expect(), et la commutation de la ignoreSynchronization dos à faux donc Rapporteur pouvez continuer à l'essai dans les AngularJS la cadence.Je sais que les couchages ne sont pas l'idéal, mais ils sont très courts.

browser.sleep(500);
browser.ignoreSynchronization = true;
expect(page.notification.getText()).toContain('The card was declined.');
browser.sleep(500);
browser.ignoreSynchronization = false;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top