REST API单元测试,在Node.js中返回承诺

时间:2018-10-31 19:46:44

标签: node.js unit-testing promise sinon sinon-chai

我在一个类中有一个函数,该函数调用REST api并返回Promise对象。我能够测试Promise对象,但不知道我们如何存根或模拟rest api调用和测试。

Token.js

class Token {

  getToken(payload) {
    let outahToken = new Promise(function (resolve, reject) {
      request('hhtps://xyz.com', function (err, res, body) {
        if (err) {
          reject(err);
        } else {
          console.log(res);
          resolve(body);
        }
      })
    });

    return outahToken;
  }
}
module.exports = Token;

Token.test.js

'use strict'

const chai = require("chai");
const expect = chai.expect;
const nock = require('nock');
const sinon = require("sinon");
const Token = require('Token');
describe('Get User tests', () => {
  let Token;
  beforeEach(() => {
    outhController = new Token();
    sinon.stub(Token, 'getToken').returns(Promise.resolve({
      name: "All"
    }));

  });

  it('Outh test', (done) => {
    Token.getToken(payload)
      .then(response => {
        expect(typeof response).to.equal('object');
        done();
      });
  });
});        

1 个答案:

答案 0 :(得分:0)

我们可以使用proxyquire模拟请求模块,并检查是否使用正确的参数调用了该模块。我们需要proxyquire,因为请求模块导出的函数df.describe() #with X is already pre-proccessed df2 = pandas.DataFrame(X) df2.describe() 仅使用Sinon很难模拟。

由于请求方法是一个回调函数,因此我们可以使用Sinon yields对其进行模拟。

request()

希望有帮助