2016-10-12 1 views
0

Я использую testdouble.js для проверки функций пары. Для функции ниже я изо всех сил пытаюсь понять, как лучше всего заглушить вызов API-интерфейса, чтобы покрыть оставшуюся часть функции. Похоже, это должно быть просто, но я думаю, что слишком долго смотрел на него.Использование Testdouble.js для заглушения API вызова и разрешения обещания

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

Мой тест выглядит как ниже:

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

И ошибки я получаю:

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

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

ответ

0

Два разных Обещания не будут равны, даже если они решают с тот же результат (то же, что и {} === {}, который возвращает false). Для решения этой проблемы вам необходимо создать свое обещание заранее:

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) 
Смежные вопросы