2017-09-12 51 views
6

Pracuję nad zautomatyzowaniem scenariusza Od końca do końca przy użyciu Mocha. Mam punkt końcowy adresu URL, który ma być odpytany, aż do uzyskania określonej wartości w wynikowej odpowiedzi. Czy jest jakiś sposób to zrobić?Odpytywanie adresu URL do momentu ustawienia określonej wartości w odpowiedzi JSON: Mokka, testowanie integracyjne

+0

sprawdź ten jeden https://github.com/ilikebits/gallop –

+0

Jak zapewnić autoryzację dla żądania GET, a także otrzymuję TypeError: Nie można odczytać właściwości "subscribe" o niezdefiniowanym błędzie –

+0

czy znasz programowanie gniazda z węzłem? – Salman

Odpowiedz

-1

W ten sposób udało mi się zrobić to z WebdriverIO i 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

Tęskniłeś kilka rzeczy: 1) sprawdź odpowiedź ma oczekiwaną wartość 2) wyrzuć błąd w czasie max_seconds_to_wait 3) zmień domyślny limit czasu tylko dla tego testu. Pomysł użycia WebdriverIO jest bardzo fajny! – galkin

+0

Dziękuję za komentarze, zredagowałem odpowiedź. Myślę, że lepszym sposobem na to jest stworzenie funkcji eksportu, która nie znajduje się w teście, jak funkcja użyteczności, a następnie łatwiej będzie przekazać tej funkcji niezbędny time_to_wait. – satlosb

5

Przykład z request i podejście 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(); 
    }); 
}); 

Przykład z got i async/podejście czekają

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