2017-07-20 1 views
1

J'ai un test écrit en E2EProtractor-Jasmine pour ma Angular2-TypeScript application comme ci-dessous,Faire request.post exécuter dans l'ordre

it("Perform Some Action", function() { 

    element(by.css('[ng-reflect-placeholder="Email"]')).sendKeys(test_email); 
    element(by.css('[ng-reflect-placeholder="Password"]')).sendKeys("pass"); 
    element(by.css('[ng-reflect-placeholder="Confirm Password"]')).sendKeys("conf pass"); 
    element(by.buttonText("CONTINUE")).click(); 

    request.post(
     'myAPIEndPoint', 
     { json: { emailaddress: test_email,user: "user1",code: "1234" } }, 
     function(error, response, body) { 
     if (!error && response.statusCode == 200) { 
      console.log(body) 
      var info = JSON.parse(body); 
      //Do something 
     } 
     } 
    ); 

Maintenant, le problème que je suis face est que, la request.post devient appelée avant les déclarations ci-dessus et provoquant l'échec de mes tests car la réponse d'api post call n'aura de valeur que si les instructions ci-dessus seront exécutées avant l'appel.

Quelle est la bonne façon de s'assurer que le post-call est fait seulement après que les instructions ci-dessus sont exécutées?

Répondre

0

Le problème se produit car la plupart des instructions de rapporteur sont effectuées de manière asynchrone. La même chose s'applique à sendKeys() et click().

Vous devez faire deux choses:

  1. Perform demande lors click() promesse est résolu (dans la méthode .then())
  2. Informez votre Jasmine que le travail asynchrone est fait, et il peut aller avec le reste de la suite (en utilisant la structure it('description', function(done){})

Votre TC ressemblerait ci-dessous:

it("Perform Some Action", function(done) { 
    element(by.css('[ng-reflect-placeholder="Email"]')).sendKeys(test_email); 
    element(by.css('[ng-reflect-placeholder="Password"]')).sendKeys("pass"); 
    element(by.css('[ng-reflect-placeholder="Confirm Password"]')).sendKeys("conf pass"); 
    element(by.buttonText("CONTINUE")).click().then(()=> { 
     request.post(
      'myAPIEndPoint', 
      { json: { emailaddress: test_email,user: "user1",code: "1234" } }, 
      function(error, response, body) { 
      if (!error && response.statusCode == 200) { 
       console.log(body) 
       var info = JSON.parse(body); 
       //Do something 
       done(); 
      } 
      } 
     ); 
    }); 
});