如何在 Jest 中测试方法 returns 是否为 class 的数组
How to test if a method returns an array of a class in Jest
我将测试一个方法(使用 TypeScript 语言)以确保它 returns 一个 class.
的数组
这是我的代码:
it('should return an array of Entity class', async () => {
expect(await service.getAll()).toBeInstanceOf(Entity[]);
});
但它在 []
处显示以下错误消息:
An element access expression should take an argument.
由于 Jest 测试是 运行时 测试,它们只能访问运行时信息。您正在尝试使用一种类型,即 compile-time 信息。 TypeScript 应该已经为您完成了类型方面的工作。 (稍后会详细介绍。)
测试只能访问运行时信息这一事实有几个后果:
If 它对 getAll
到 return 一个空数组有效(因为没有任何实体可以获取),测试 cannot 告诉您数组 是否会有 如果数组不为空则其中有 Entity
个元素。它只能告诉你它有一个数组。
在 non-empty 的情况下,您必须检查 数组的每个元素 以查看它是否是 Entity
。你说 Entity
是一个 class,而不仅仅是一个类型,所以这是可能的。我不是 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();
});
当心,不过,所有对空数组 return true
的 every
调用,所以再次出现空数组问题抬起头。
如果您的 Jest 测试是用 TypeScript 编写的,您可以通过确保 TypeScript 测试 getAll
的 return 值的 compile-time 类型来改进它:
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
对象的数组时抱怨。
但是 :与测试应该存在的特定值相比,此测试可能 没有用 。
我将测试一个方法(使用 TypeScript 语言)以确保它 returns 一个 class.
的数组这是我的代码:
it('should return an array of Entity class', async () => {
expect(await service.getAll()).toBeInstanceOf(Entity[]);
});
但它在 []
处显示以下错误消息:
An element access expression should take an argument.
由于 Jest 测试是 运行时 测试,它们只能访问运行时信息。您正在尝试使用一种类型,即 compile-time 信息。 TypeScript 应该已经为您完成了类型方面的工作。 (稍后会详细介绍。)
测试只能访问运行时信息这一事实有几个后果:
If 它对
getAll
到 return 一个空数组有效(因为没有任何实体可以获取),测试 cannot 告诉您数组 是否会有 如果数组不为空则其中有Entity
个元素。它只能告诉你它有一个数组。在 non-empty 的情况下,您必须检查 数组的每个元素 以查看它是否是
Entity
。你说Entity
是一个 class,而不仅仅是一个类型,所以这是可能的。我不是 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(); });
当心,不过,所有对空数组 return
true
的every
调用,所以再次出现空数组问题抬起头。
如果您的 Jest 测试是用 TypeScript 编写的,您可以通过确保 TypeScript 测试 getAll
的 return 值的 compile-time 类型来改进它:
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
对象的数组时抱怨。
但是