Moh*_*sen 3 javascript typescript jestjs
我将测试一个方法(使用 TypeScript 语言)以确保它返回一个类的数组。
这是我的代码:
it('should return an array of Entity class', async () => {
expect(await service.getAll()).toBeInstanceOf(Entity[]);
});
Run Code Online (Sandbox Code Playgroud)
但它显示以下错误消息[]
:
元素访问表达式应该带有一个参数。
由于 Jest 测试是运行时测试,因此它们只能访问运行时信息。您正在尝试使用一种类型,它是编译时信息。TypeScript 应该已经为您完成了类型方面的工作。(稍后会详细介绍。)
测试只能访问运行时信息这一事实有几个后果:
如果返回空数组是有效的getAll
(因为没有任何实体可供获取),则测试无法告诉您如果数组不为空,数组中是否会有元素。Entity
它只能告诉你它有一个数组。
在非空情况下,您必须检查数组的每个元素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();
});
Run Code Online (Sandbox Code Playgroud)
但请注意,所有对every
空数组的调用都会返回true
,因此,空数组问题再次出现。
如果您的 Jest 测试是用 TypeScript 编写的,您可以通过确保 TypeScript 测试 的返回值的编译时类型来改进这一点getAll
:
it('should return an array of Entity class', async () => {
const all = await service.getAll()
expect(all.every(e => e instanceof Entity)).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)
如果 TypeScript 无效,它会在编译时抱怨该赋值,而 Jest 会在运行时抱怨,如果它看到一个包含非对象的数组Entity
。
但jonrsharpe 有一个很好的观点:与测试应该存在的特定值相比,此测试可能没有用。
归档时间: |
|
查看次数: |
3555 次 |
最近记录: |