1

我正在尝试使用使用request-promise. 我附上了.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

4

1 回答 1

1

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

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

您对 stub & rewire 所做的事情被设置request-promise为一个返回承诺的函数。


一个可能的修复:

var requestPromise = sinon.stub().returns({ promise: () => Promise.resolve() });
于 2017-11-17T03:01:39.203 回答