gpt4 book ai didi

node.js - REST API 单元测试,并在 Node.js 中返回 Promise

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:39 24 4
gpt4 key购买 nike

我在一个类中有一个函数,它调用 REST api 并返回 Promise 对象。我能够测试 Promise 对象,但我不确定如何 stub 或模拟 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();
});
});
});

最佳答案

我们可以使用proxyquire来模拟请求模块并检查是否使用正确的参数调用它。我们需要 proxyquire,因为 request 模块导出一个函数 request(),仅用 Sinon 很难模拟。

并且由于request方法是一个回调函数,我们可以使用Sinon yields来 mock 它。

const chai = require('chai');
const sinon = require('sinon');
const proxyquire = require('proxyquire');

const expect = chai.expect;

describe('Token test', function() {
let outhController;
let Token;
let requestStub;

beforeEach(() => {
const err = null;
const res = null;
const body = { name: 'All' };

requestStub = sinon.stub().yields(err, res, body); // create sinon for request function and return response body that we want
Token = proxyquire('Token', { request: requestStub }) // replace original request module with our sinon stub

outhController = new Token();
});

it('Outh test', (done) => {
const payload = {};
outhController.getToken(payload)
.then(response => {
sinon.assert.calledWith(requestStub, 'hhtps://xyz.com');

expect(typeof response).to.equal('object');
expect(response.name).to.equal('All');

done();
});
});
});

希望对你有帮助

关于node.js - REST API 单元测试,并在 Node.js 中返回 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53090916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com