我对后端的单元测试比较陌生,需要一些指导如何对以下内容进行单元测试。我正在使用Mocha / Should / Sinon。
exports.get = function(req, res) {
if (req.query.example) {
return res.status(200).json({ success: true });
} else {
return res.status(400).json({error: true});
}
}
答案 0 :(得分:6)
您可以使用Sinon的spy
和stub
函数来测试您的代码:
const { spy, stub } = require('sinon');
const chai = require('chai');
chai.should();
describe('the get function', () => {
let status,
json,
res;
beforeEach(() => {
status = stub();
json = spy();
res = { json, status };
status.returns(res);
});
describe('if called with a request that has an example query', () => {
beforeEach(() => get({ query: { example: true } }, res));
it('calls status with code 200', () =>
status.calledWith(200).should.be.ok
);
it('calls json with success: true', () =>
json.calledWith({ success: true }).should.be.ok
);
});
describe('if called with a request that doesn\'t have an example query', () => {
beforeEach(() => get({ query: {} }, res));
it('calls status with code 400', () =>
status.calledWith(400).should.be.ok
);
it('calls json with error: true', () =>
json.calledWith({ error: true }).should.be.ok
);
});
});
在第一次beforeEach
来电中,我创建了一个名为status
的存根和一个名为json
的间谍。
status
存根用于测试是否使用正确的响应代码调用响应的状态方法。
json
spy用于测试是否使用正确的JSON代码调用响应的json方法。
注意我使用status
的存根来返回任何调用status
方法的模拟响应,否则链接(res.status().json()
)会不行。
对于json
,只需使用一个简单的间谍即可,因为它位于链的末尾。