我正在构建一个 AWS Lambda 函数并尝试为它编写一些集成测试。Lambda 函数使用serverless-offline 插件在本地运行,并简单地接收带有一些查询参数的 GET 请求。我正在使用 Jest 和 Supertest 编写我的集成测试,如下所示:
import request from 'supertest';
describe('User position handler', () => {
it('should return history', () => {
const server = request('http://0.0.0.0:4000');
return server
.get(`/local/position?type=month&period=3`)
.expect(200)
.expect((response) => {
console.log('RESPONSE', response);
expect(response.body).toHaveLength(3);
});
});
});
问题是,当我使用收集覆盖选项运行 Jest 时,使用 Supertest 发送的请求所达到的代码不会在指标中计算。运行jest --collectCoverage
结果是:
问题是我知道,例如,infra/handlers/user-position.ts
正在达到并覆盖超过 0% 的语句,但覆盖率指标未按预期显示。另外,我知道user-monthly-position.service.impl.ts
在流程的某个时刻已经达到了这一点,因为该服务负责从外部服务返回数据,而来自 Supertest 的响应正在返回数据。绿线来自单元测试所涵盖的文件,这些文件仅使用 Jest(显然不是 Supertest)
这是我的处理程序函数的代码:
export default async (event: APIGatewayEvent): Promise<APIGatewayProxyResult> => {
await cacheService.bootstrapCache();
const userMonthlyPositionService = new UserMonthlyPositionServiceImpl(
cacheService.connectionPool,
);
const getUserMonthlyPositionHistory = new GetUserMonthlyPositionHistory(
userMonthlyPositionService,
);
const result = await getUserMonthlyPositionHistory.execute({
cblc: 999999,
period: 3,
type: 'month',
});
return buildResponse(200, result);
};
我的问题是:如何使用 Supertest 和无服务器框架从 Jest 收集正确的代码覆盖率指标?我忘记了一个细节吗?谢谢!