2017-09-12 19 views
6

Tôi đang làm việc để tự động hóa kịch bản Kết thúc đến cuối bằng cách sử dụng Mocha. Tôi có điểm cuối url sẽ được thăm dò cho đến khi một giá trị nhất định thu được trong phản hồi kết quả. Có cách nào để làm điều đó ?Bỏ phiếu cho URL cho đến khi giá trị nhất định được đặt trong phản hồi JSON: Mocha, Kiểm tra tích hợp

+0

kiểm tra điều này https://github.com/ilikebits/gallop –

+0

Làm cách nào để cung cấp ủy quyền cho yêu cầu GET và tôi cũng nhận được TypeError: Không thể đọc thuộc tính 'đăng ký' của lỗi không xác định –

+0

bạn có biết lập trình socket với nút không? – Salman

Trả lời

-1

Đây là cách tôi đã có thể làm điều đó với WebdriverIO và Mocha

describe("wait for value in content of page",() => { 
    it("should be able to wait to value in url",() => { 

     var max_seconds_to_wait = 10; 
     var seconds_counter = 0; 
     var should_continue = true; 

     while (should_continue) { 

     browser.url('http://your.url.com'); 
     var response = JSON.parse(browser.getText("body")); 
     console.log(response) 

     if (response == 'something') { 
      should_continue = false;    
     } 
     browser.pause(1000); 
     seconds_counter++; 

     if (seconds_counter > max_seconds_to_wait) { 
      throw 'Waiting for json from url timeout error'; 
     } 
    } 
    }); 
}); 
+0

Bạn đã bỏ lỡ một số điều: 1) kiểm tra phản hồi có giá trị kỳ vọng 2) lỗi ném vào thời gian max_seconds_to_wait 3) thay đổi thời gian chờ mặc định chỉ cho thử nghiệm này. Ý tưởng sử dụng WebdriverIO rất tuyệt! – galkin

+0

Cảm ơn bạn đã bình luận, tôi đã chỉnh sửa câu trả lời. Tôi nghĩ rằng một cách tốt hơn để làm điều đó là tạo ra một hàm có thể xuất khẩu không phải bên trong thử nghiệm, như một hàm tiện ích, và sau đó nó sẽ dễ dàng hơn để vượt qua hàm này time_to_wait cần thiết. – satlosb

5

Ví dụ với request và cách tiếp cận callback:

const request = require('request'); 

describe('example',() => { 
    it('polling', function (done) { 
     this.timeout(5000); 

     let attemptsLeft = 10; 
     const expectedValue = '42'; 
     const delayBetweenRequest = 100; 

     function check() { 
      request('http://www.google.com', (error, response, body) => { 
       if (body === expectedValue) return done(); 
       attemptsLeft -= 1; 
       if (!attemptsLeft) return done(new Error('All attempts used')); 
       setTimeout(check, delayBetweenRequest); 
      }); 
     } 

     check(); 
    }); 
}); 

Ví dụ với got và async/chờ đợi cách tiếp cận:

const utils = require('util'); 
const got = require('got'); 

const wait = utils.promisify(setTimeout); 

describe('example',() => { 
    it('polling', async function (done) { 
     this.timeout(5000); 
     const expectedValue = '42'; 
     const delayBetweenRequest = 100; 

     for (let attemptsLeft = 10; attemptsLeft; attemptsLeft -= 1) { 
      const resp = await got.get('http://www.google.com'); 
      if (resp.body === expectedValue) return done(); 
      await wait(delayBetweenRequest); 
     } 

     done(new Error('All attempts used')); 
    }); 
}); 
Các vấn đề liên quan