2014-11-05 10 views
5

Użyłem kodu z odpowiedzi https://stackoverflow.com/a/25149395/3330910.Jak czekać na odpowiedź żądania http od strony kątomierza

I dalej:

it('HTTP request', function() { 
    var BackRequest = require('../helper/backRequest'); 
    var request = new BackRequest(); 

    page.visitPage(); 

    request.setBaseUrl('http://localhost:8081'); 

    // Step #1 
    request.get('/api/v1/one') 
     .then(function(result){ 
     expect(result.statusCode).toBe(100); // An error #1 
     expect(result.bodyString).toContain('Some text'); 
    }); 

    // Step #2 
    expect(1).toBe(2); // an error #2 
}); 

i dostaję błędy w kolejności:

  • Error # 2
  • Error # 1

Jak mogę zmusić kątomierz czekać na Krok 1, a następnie wykonać krok nr 2.

tylko mogę zrobić Teraz jest łańcuchem następnie() funkcje:

request.get('/api/v1/one') 
    .then(function(result){ 
     expect(result.statusCode).toBe(100); // An error #1 
     expect(result.bodyString).toContain('Some text') 
    .then(function(result){ 
     expect(1).toBe(2); 
     }); 

Aktualizuj

Tak, to kończy się następnego podejścia:

describe('Scenarios', function() { 

    beforeEach(function() { 
     page.visitPage(); 
    }); 

    var chain = function() { 
     var defer = protractor.promise.defer(); 
     defer.fulfill(true); 
     return defer.promise; 
    }; 

    it('HTTP request', function() { 
     var BackRequest = require('../helper/backRequest'); 
     var request = new BackRequest(); 
     request.setBaseUrl('http://localhost:8081'); 

     chain() 
      .then(function() { 
       // Save data 
      }) 

      .then(function() { 
       request.get('/api/v1/one') 
        .then(function (result) { 
         expect(result.statusCode).toBe(200); 
         expect(result.bodyString).toContain('text'); 
        }); 
      }) 

      .then(function() { 
       // Change and Save again 
      }) 

      .then(function() { 
       request.get('/api/v1/one') 
        .then(function (result) { 
         expect(result.statusCode).toBe(200); 
         expect(result.bodyString).toContain('new text'); 
         expect(result.bodyString).not.toContain('text'); 
        }); 
      }); 
    }); 

}); 

Dzięki Leo Gallucci o pomoc.

Odpowiedz

6

Krok 2 zostanie rozwiązany natychmiast, ponieważ nie ma na co czekać, nie ma żadnych obietnic webdriver tam jesteś po prostu porównywania liczb bezwzględnych z expect(1).toBe(2);

można trzymać z łańcuchowym then() jak ty czy tak jak ja wolą jest oddzielne bloki: it()

it('HTTP request', function() { 
    // Step #1 code ... 
}); 

it('keeps testing other things in this step #2', function() { 
    expect(1).toBe(2); 
}); 

BTW Cieszę się znaleźć przydatne moja druga answer!

+0

Dzięki za odpowiedź. Użyłem osobnego podejścia It(), ale chcę zrobić wszystko w jednym teście. Czy istnieje sposób dodania zadania do kontrolki Flow z testu? –