2017-07-20 4 views
1

Ich habe einen E2E Test für meine Angular2-TypeScript Anwendung in Protractor-Jasmine geschrieben, wie unten,Make request.post nacheinander ausführen

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 
     } 
     } 
    ); 

Nun, das Problem, das ich bin vor ist, dass die request.post vor den Aussagen genannt zu werden darüber hinaus und verursachen, dass meine Tests fehlschlagen, da die Antwort von einem api-Nach-Anruf nur dann einen Wert hat, wenn die obigen Anweisungen vor dem Nach-Anruf ausgeführt werden.

Was ist der richtige Weg, um sicherzustellen, dass die post-call nur getan wird, nachdem die Anweisungen darüber ausgeführt werden?

Antwort

0

Das Problem tritt auf, weil die meisten Winkelmesseranweisungen asynchron ausgeführt werden. Gleiches gilt für sendKeys() und click().

Sie müssen zwei Dinge tun:

  1. Anfrage durchführen, wenn click() Versprechen (im .then() Methode) aufgelöst wird
  2. Informieren Sie Ihren Jasmin, dass die asynchrone Arbeit erledigt ist, und es kann mit dem Rest weitergehen von Suite (it('description', function(done){}) Struktur

Ihr TC würde wie folgt aussehen mit:

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(); 
      } 
      } 
     ); 
    }); 
}); 
Verwandte Themen