如何使用 Jest 和 TypeScript 在可能属于两种不同类型的对象上测试 属性?
How can I test a property on an object that may be of two different types using Jest and TypeScript?
我有一个函数 getFruit()
returns 两种可能的类型,Banana | Apple
。
我有一个开玩笑的单元测试,其中包括一个 属性 的测试,它存在于其中一种类型上,但不存在于另一种类型上。在这种情况下,Banana
有 属性 peel
但 Apple
没有。
test(`gets a banana`, () => {
const fruit = getFruit(id)
expect(fruit?.peel).toBeDefined();
})
我很满意 fruit?.peel
在首次引用时可能未定义,因为我正在测试 fruit?.peel
在同一行中定义。
但是 TS 将 fruit?.peel
行标记为有错误:
Property 'peel' does not exist on type 'Banana | Apple'.
Property 'peel' does not exist on type 'Apple'
如何使用 Jest 和 TypeScript 在可能属于两种不同类型的对象上测试 属性?
我知道我可以使用 ts-ignore 禁用 TS 编译器,但我希望得到修复而不是解决方法。
虽然 TypeScript 不会让您访问未知存在的 属性,但它会让您使用 in
运算符检查其是否存在:
expect('peel' in fruit).toEqual(true);
或者正如 jonrsharpe 指出的那样,这样做可能更好:
expect(fruit).toHaveProperty('peel');
在失败的情况下输出:
expect(received).toHaveProperty(path)
Expected path: "peel"
Received path: []
Received value: {"cultivar": "braeburn"}
而不是:
expect(received).toEqual(expected) // deep equality
Expected: true
Received: false
我有一个函数 getFruit()
returns 两种可能的类型,Banana | Apple
。
我有一个开玩笑的单元测试,其中包括一个 属性 的测试,它存在于其中一种类型上,但不存在于另一种类型上。在这种情况下,Banana
有 属性 peel
但 Apple
没有。
test(`gets a banana`, () => {
const fruit = getFruit(id)
expect(fruit?.peel).toBeDefined();
})
我很满意 fruit?.peel
在首次引用时可能未定义,因为我正在测试 fruit?.peel
在同一行中定义。
但是 TS 将 fruit?.peel
行标记为有错误:
Property 'peel' does not exist on type 'Banana | Apple'.
Property 'peel' does not exist on type 'Apple'
如何使用 Jest 和 TypeScript 在可能属于两种不同类型的对象上测试 属性?
我知道我可以使用 ts-ignore 禁用 TS 编译器,但我希望得到修复而不是解决方法。
虽然 TypeScript 不会让您访问未知存在的 属性,但它会让您使用 in
运算符检查其是否存在:
expect('peel' in fruit).toEqual(true);
或者正如 jonrsharpe 指出的那样,这样做可能更好:
expect(fruit).toHaveProperty('peel');
在失败的情况下输出:
expect(received).toHaveProperty(path)
Expected path: "peel"
Received path: []
Received value: {"cultivar": "braeburn"}
而不是:
expect(received).toEqual(expected) // deep equality
Expected: true
Received: false