2017-09-12 4 views
6

Je travaille sur l'automatisation d'un scénario de bout en bout en utilisant Mocha. J'ai un point d'extrémité d'url qui doit être interrogé jusqu'à ce qu'une certaine valeur soit obtenue dans la réponse résultante. Y a-t-il un moyen de le faire ?Sondage d'une URL jusqu'à ce qu'une certaine valeur soit définie dans la réponse JSON: Mocha, Tests d'intégration

+0

cochez cette case https://github.com/ilikebits/gallop –

+0

Comment puis-je fournir l'autorisation pour une requête GET et aussi obtenir TypeError: Impossible de lire la propriété 'subscribe' de l'erreur indéfinie –

+0

connaissez-vous la programmation socket avec noeud? – Salman

Répondre

-1

Voilà comment j'ai pu le faire avec WebdriverIO et 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

Vous avez manqué plusieurs choses: 1) la réponse à la vérification a une valeur attendue 2) l'erreur de lancer sur l'heure max_seconds_to_wait 3) change le délai par défaut seulement pour ce test. Utilisation de l'idée WebdriverIO est très cool! – galkin

+0

Merci pour les commentaires, j'ai édité la réponse. Je pense qu'une meilleure façon de le faire est de créer une fonction exportable qui n'est pas dans le test, comme une fonction utilitaire, et il sera alors plus facile de passer cette fonction time_to_wait. – satlosb

5

Exemple avec request et approche de rappel:

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

Exemple avec got et approche async/attendent:

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