如何分配承诺类型的参数

时间:2021-07-15 00:15:10

标签: node.js typescript express unit-testing jestjs

我正在尝试使用 jest 进行一些单元测试以进行测试,我在名为 generator 的单独文件中有两个函数,我在其中创建了假数据:

generator.ts

any

当我尝试用这样的玩笑创建单元测试时:

export async function generateReportData(overide = {}) {
    return {
        clientId: faker.datatype.number(),
        incidentDesc: faker.lorem.sentence(15),
        city: faker.address.city(),
        country: faker.address.country(),
        createdAt: new Date(),
        ...overide,
    };
}

export async function generateReportsData(n: number = 1, overide = {}) {
    return Array.from(
        {
            length: n,
        },
        (_, i) => {
            return generateReportData({ id: i, ...overide });
        }
    );
}

我收到此错误:

<块引用>

'Promise<{ clientId: number; 类型的参数事件描述:字符串; 城市:字符串;国家:字符串; createdAt:日期; }>[]' 不是 可分配给类型为 'Report[] | 的参数承诺<报告[]>'。

这是我的存储库:

 test("should return report list", async () => {
            const reportsData = generateReportsData(4);
            const spy = jest
                .spyOn(ReportRepository, "getReports")
                .mockResolvedValueOnce(reportsData);
            const controller = new ReportController();
            const reports = await controller.getReports();
            expect(reports).toEqual(reportsData);
            expect(spy).toHaveBeenCalledWith();
            expect(spy).toHaveBeenCalledTimes(1);
        });

1 个答案:

答案 0 :(得分:1)

问题很可能是你没有输入 generateReportData 函数的返回值,所以 typescript 不知道类型实际上是 Report (还有,为什么它是异步的?) .只需添加类型,你应该没问题:

export function generateReportData(overide = {}): Report