我的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 |
----------------|---------|----------|---------|---------|-------------------