0

I'm using testdouble.js to test a couple functions. For the below function, I'm struggling to figure out how to best stub the get API call in order to cover the remainder of function. It seems like it should be straightforward, but I think I've been staring at it too long.

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

My test looks like the below:

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

And the error I'm receiving:

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

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

1 Answers1

0

The two different Promises will never be equal even if they resolve with the same result (same as doing {} === {} which returns false). To solve this problem you need to create your promise beforehand like this:

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)
cdimitroulas
  • 2,380
  • 1
  • 15
  • 22