3

我正在构建一个 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 收集正确的代码覆盖率指标?我忘记了一个细节吗?谢谢!

4

0 回答 0