unit-testing - Node.js Express.js:用于单元测试目的的模拟请求对象
问题描述
我有一个方法来检查请求查询字符串是否有一些参数:
checkMandatoryQueryParams (mandatoryQueryParams: String[], req: Request): void {
let result = true;
mandatoryQueryParams.forEach((element, idx) => {
if (!req.query.hasOwnProperty(element)) {
result = false;
}
});
return result;
}
在单元测试中,我需要模拟测试请求,例如:
describe('Utils', () => {
it('checkMandatoryQueryParams', () => {
const req: Request = new Request(); // pseudo-code
req.query = "?foo=test&bar=test"; // pseudo-code
expect( checkMandatoryQueryParams(['foo', 'bar'], req) ).toEqual(true);
});
});
我如何模拟快递请求?
解决方案
两种选择:
创建自己的模拟对象:
describe('Utils', () => {
/**
* Mocked Express Request object
*/
let mockedReq;
beforeEach(() => {
mockedReq = {
query: {}
};
})
it('checkMandatoryQueryParams', () => {
const req = mockedReq;
req.query = "?foo=test&bar=test"; // pseudo-code
expect(checkMandatoryQueryParams(['foo', 'bar'], req) ).toEqual(true);
});
});
使用手动 mocks,类似于上面:
describe('Utils', () => {
/**
* Mocked Express Request object
*/
let mockedReq;
beforeAll(() => {
mockedReq = jest.fn().mockImplementation(() => {
const req = {
// Implementation
};
return req;
});
});
beforeEach(() => mockedReq.mockReset())
it('checkMandatoryQueryParams', () => {
const req = mockedReq;
req.query = "?foo=test&bar=test"; // pseudo-code
expect(checkMandatoryQueryParams(['foo', 'bar'], req) ).toEqual(true);
});
});
推荐阅读
- java - 如何实现 Jax-RS 基本身份验证?
- java - 使用从 RSA 解密获得的解密 DES 密钥
- java - 我想将多个浮点值存储到数组中,从 mysql 数据库中检索,但它不存储所有值
- php - php查询搜索结果不稳定
- android - 使用 espresso 测试图像不起作用
- swift - 从超类访问子类函数
- c++ - #include 上的 Code::Blocks (MinGW) 编译错误
- android - 为什么 React native 给出错误“adb”不被识别为内部或外部命令?
- json - 我可以在 SQL Server 中修改多对象 JSON 数组中的所有值吗?
- wso2esb - Datamapper 中的外部值使用 - WSO2 ESB