单元测试express中间件



我的express应用程序中有以下中间件功能

const { getEmployerId } = require("./employerApi");
const setEmployerDetails = (employerId) => {
return (req, res, next) => {
getEmployerId(req, res, next, employerId);
}
}
module.exports = setEmployerDetails

我想对这个中间件进行单元测试,但我不确定如何,函数基本上返回API返回的任何东西,API已经进行了单元测试。我该如何用chai之类的东西对这个函数进行单元测试?

到目前为止,

describe('setEmployerDetails`, () => {
it('should be a function', () => expect(setEmployerDetails).to.be.a('function'));
it('should take 1 argument', () => expect(setEmployerDetails.length).to.equal(1));
});`

您应该使用链接接缝来存根getEmployerId函数。然后,像往常一样进行测试。

例如

mw.js:

const { getEmployerId } = require('./employerApi');
const setEmployerDetails = (employerId) => {
return (req, res, next) => {
getEmployerId(req, res, next, employerId);
};
};
module.exports = setEmployerDetails;

mw.test.js:

const proxyquire = require('proxyquire');
const sinon = require('sinon');
describe('66798873', () => {
it('should pass', () => {
const getEmployerId = sinon.stub();
const setEmployerDetails = proxyquire('./mw', {
'./employerApi': { getEmployerId },
});
const mReq = {};
const mRes = {};
const mNext = sinon.stub();
setEmployerDetails(123)(mReq, mRes, mNext);
sinon.assert.calledWithExactly(getEmployerId, {}, {}, mNext, 123);
});
});

单元测试结果:

66798873
✓ should pass (2712ms)

1 passing (3s)
----------------|---------|----------|---------|---------|-------------------
File            | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------------|---------|----------|---------|---------|-------------------
All files       |     100 |      100 |     100 |     100 |                   
employerApi.js |       0 |        0 |       0 |       0 |                   
mw.js          |     100 |      100 |     100 |     100 |                   
----------------|---------|----------|---------|---------|-------------------

最新更新