2014-11-05 64 views
5

我使用了答案https://stackoverflow.com/a/25149395/3330910中的代碼。如何等待來自量角器端的http請求的響應

我下一步:

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

而且我爲了得到錯誤:

  • 錯誤#2
  • 錯誤#1

我怎麼能強迫量角器等待步驟#1,然後執行步驟#2。

現在只有我能做的就是鏈則()函數:

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

更新

所以,它最終與另一個方法:

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

}); 

謝謝Leo Gallucci尋求幫助。

回答

6

第2步得到立即解決,因爲沒有什麼等待,沒有承諾的webdriver那裏你只需用expect(1).toBe(2);

你能堅持比較絕對數字與鏈接then()像你一樣或方式我喜歡是單獨it()塊:

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

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

順便說一句,我很高興你發現有用我的其他answer

+0

感謝您的回覆。我使用了單獨的It()方法,但我想在一次測試中完成所有事情。有沒有辦法將任務添加到測試的controlFlow? – 2014-11-06 08:58:39

相關問題