2016-10-12 3 views
0

J'utilise testdouble.js pour tester quelques fonctions. Pour la fonction ci-dessous, j'ai du mal à trouver la meilleure façon de boucler l'appel API get afin de couvrir le reste de la fonction. Il semble que cela devrait être simple, mais je pense que je l'ai regardé trop longtemps.Utiliser Testdouble.js pour interrompre l'appel API et résoudre une promesse

var checkTags = function(tags) { 
    return new Promise(function(resolve) { 

     /* istanbul ignore if */ 
     if (process.env.NODE_ENV !== 'test') { 
      console.log("Entered Check Tags"); 
     } 
     var tagMSG; 
     var url = 'https://api.to.call/'; 
     tags.Tags.forEach(function(uaiTag) { 
      tagMSG = uaiTag.Key === 'UAI' ? uaiTag.Value : 'No Tag'; 
     }); 
     console.log(tagMSG); 
     if (tagMSG === "No Tag") return resolve('FAILED'); 
     request.get(url + tagMSG, function(error, response) { 
      var returnStatus = 'FAILED'; 
      console.log(returnStatus); 
      if (!error && response.statusCode === 200) { 
       returnStatus = 'PASSED'; 
      } 
      return resolve(returnStatus); 
     }) 
    }); 
}; 

Mon test ressemble au-dessous:

it('should resolve2', function(done) { 
    td.replace(request, 'get', function() { 
     return new Promise((resolve) => resolve('PASSED')); 
    }); 

    var policy = require('../main/js-utils'); 
    should(policy.checkTags(require('./data/tags.json'))).be.equal(new Promise((resolve) => resolve())); 
    }); 

Et l'erreur que je reçois:

AssertionError: expected [Promise] to be [Promise] 
    + expected - actual 

    { 
    - "_bitField": 0 
    + "_bitField": 33554432 
    "_fulfillmentHandler0": [undefined] 
    "_promise0": [undefined] 
    "_receiver0": [undefined] 
    - "_rejectionHandler0": [undefined] 
    + "_rejectionHandler0": "PASSED" 
    } 

Répondre

0

Les deux promesses différentes ne seront jamais égaux, même si elles résolvent avec le même résultat (même chose que {} === {} qui renvoie false). Pour résoudre ce problème, vous devez créer votre promesse au préalable comme ceci:

const promise = new Promise((resolve) => resolve('PASSED') 
td.replace(request, 'get', function() { 
    return promise 
}) 
var policy = require('../main/js-utils') 
should(policy.checkTags(require('./data/tags.json'))).be.equal(promise)