单元测试请求 - 承诺,promise()不是函数

时间:2017-07-28 15:11:00

标签: javascript unit-testing sinon request-promise

我正在尝试使用request-promise的sinon / mocha对此函数进行单元测试。我附上.promise()以允许访问所有Bluebird承诺方法。

根据request-promise自述文件:

rp(...).promise() or e.g. rp.head(...).promise() which returns the underlying promise so you can access the full Bluebird API

myModule.js     var requestPromise = require('request-promise');

function requestWrapper(opts) {
   // Adds .promise() to allow access to Bluebird methods
   return requestPromise(opts).promise();
}

module.exports = requestWrapper;

单元测试

var Promise = require('bluebird');
var requestPromise = sinon.stub().returns(Promise.resolve());
var rewire = require('rewire');
var myModule = rewire('./myModule');

myModule.__set__({
  requestPromise: requestPromise
});

describe('myModule', function() {
  var testPromise;

  it('should...', function() {
      testPromise = myModule.requestWrapper({ method: 'GET', url: 'http://someurl.com' })
  });
});

错误

我收到以下错误:TypeError: requestPromise(...).promise is not a function

1 个答案:

答案 0 :(得分:0)

你嘲笑是错的(但很接近)。

request-promise是一个函数,它返回一个具有函数promise的对象,该对象返回潜在的承诺。

你用你的存根和你做了什么重新排列设置为request-promise是一个返回承诺的函数。

可能的解决办法:

var requestPromise = sinon.stub().returns({ promise: () => Promise.resolve() });