gpt4 book ai didi

javascript - 如何测试一个方法是否在 Jest 中返回一个类的数组

转载 作者:行者123 更新时间:2023-12-02 01:40:11 25 4
gpt4 key购买 nike

我要测试一个方法(使用 TypeScript 语言)以确保它返回类的数组。

这是我的代码:

it('should return an array of Entity class', async () => {
expect(await service.getAll()).toBeInstanceOf(Entity[]);
});

但它在 [] 处显示以下错误消息:

An element access expression should take an argument.

最佳答案

由于 Jest 测试是运行时测试,它们只能访问运行时信息。您正在尝试使用一种类型,它是编译时信息。 TypeScript 应该已经为您完成了类型方面的工作。 (稍后会详细介绍。)

测试只能访问运行时信息的事实有几个后果:

  • 如果 getAll 返回一个空数组是有效的(因为没有任何实体可以获取),测试不能 告诉您数组是否有 Entity 元素,如果它不是空的。它只能告诉您它有一个数组。

  • 在非空情况下,您必须检查数组的每个元素 以查看它是否是一个实体。你说过 Entity 是一个类,而不仅仅是一个类型,所以这是可能的。我不是 Jest 的用户(我应该是),但它似乎没有专门针对此的测试;不过,它确实有 toBeTruthy,我们可以使用 every 来告诉我们每个元素是否都是 Entity:

    it('should return an array of Entity class', async () => {
    const all = await service.getAll()
    expect(all.every(e => e instanceof Entity)).toBeTruthy();
    });

    请注意,不过,所有对空数组上的 every 的调用都会返回 true,因此,空数组问题再次浮出水面.

如果您的 Jest 测试是用 TypeScript 编写的,您可以通过确保 TypeScript 测试 getAll 的返回值的编译时类型来改进它:

it('should return an array of Entity class', async () => {
const all: Entity[] = await service.getAll()
// ^^^^^^^^^^
expect(all.every(e => e instanceof Entity)).toBeTruthy();
});

如果赋值无效,TypeScript 会在编译时提示该赋值,而 Jest 会在运行时发现包含非 Entity 对象的数组时提示。


但是jonrsharpe has a good point :与测试应该存在的特定值相比,此测试可能有用

关于javascript - 如何测试一个方法是否在 Jest 中返回一个类的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71717652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com