我在types.ts
中定义了一个枚举:
export enum Handedness {
Left,
Right,
Both,
}
export type State = {
count: number
handedness: Handedness
}
我在state.ts
中初始化了一个对象:
import { State, Handedness } from './types'
export const initial: State = {
count: 0,
handedness: Handedness.Both
}
当我运行这个项目的测试(通过jest
)时,state.ts
生成了一个错误TypeError: Cannot read property 'Both' of undefined
,告诉我Handedness
在被引用的时候没有被定义,但是我从它的模块中导出它,并且在使用它之前导入它...所以它应该被定义。
我发现其他类似的问题都是关于未定义枚举的,但是它们似乎都是关于运行时的,就我所知,这是一个编译时的问题。
我看不出我在这里做错了什么。我在其他地方导入其他类型没有问题。但是这个枚举根本不想工作。这里发生了什么?我该如何解决它?
3条答案
按热度按时间8hhllhi21#
好吧,这不是一个让它工作的方法,但是this GitHub PR解释了
ts-jest
不支持这样工作的枚举。我已经把所有的用法都改成了(例如)("both" as Handedness)
,它工作了。所以,这不是一个解释,这是一个变通方案。f3temu5u2#
您也可以尝试使用const枚举。
所以改变:
到
显然,从
ts-jest
版本23. 10开始,你就可以这样做了。好多了!gblwokeq3#
我在使用Jest运行代码时遇到了类似的错误。该问题是由React组件导致的,该组件从一个模块导入了枚举类型,该模块也被jest.mock模拟。我通过使用jest.spyOn处理我需要的方法而不是整个模块来修复该问题。
发件人:
jest.mock("example/path", () => ({ useExampleMethod: () => {...
至:
import * as exampleModule from "example/path"; jest.spyOn(exampleModule , 'useExampleMethod').mockReturnValue({...