我有一个定义在的枚举types.ts:
export enum Handedness {
Left,
Right,
Both,
}
export type State = {
count: number
handedness: Handedness
}
Run Code Online (Sandbox Code Playgroud)
我有一个正在初始化的对象state.ts:
import { State, Handedness } from './types'
export const initial: State = {
count: 0,
handedness: Handedness.Both
}
Run Code Online (Sandbox Code Playgroud)
当我jest为这个项目运行测试(通过)时,state.ts生成一个错误TypeError: Cannot read property 'Both' of undefined,告诉我它Handedness在被引用时没有定义。但是我从它的模块中导出它并在我使用它之前导入它......所以它应该被定义。
我发现其他类似的问题询问未定义的枚举,但他们似乎都在询问运行时。据我所知,这是一个编译时问题。
我不知道我会在这里做错什么。我在其他地方导入其他类型没有问题。但是这个枚举根本不想工作。这里发生了什么,我该如何解决?
小智 7
我在使用 Jest 运行代码时遇到了类似的错误。该问题是由一个 React 组件引起的,该组件从一个模块导入了一个枚举类型,该模块也被 jest.mock 模拟。我通过使用 jest.spyOn 来解决我需要的方法而不是整个模块的问题。
从:
jest.mock("example/path", () => ({ useExampleMethod: () => {...
到:
import * as exampleModule from "example/path"; jest.spyOn(exampleModule , 'useExampleMethod').mockReturnValue({...
好吧,这不是让它工作的方法,但是这个 GitHub PR解释说ts-jest不会支持像这样工作的枚举。我已将所有用途更改为(例如)("both" as Handedness)并且它有效。所以,这不是解释,而是一种解决方法。
您还可以尝试使用const enums。
所以改变:
export enum Whatever { ... }
Run Code Online (Sandbox Code Playgroud)
到
export const enum Whatever { ... }
Run Code Online (Sandbox Code Playgroud)
显然从 23.10 版本开始ts-jest你就可以这样做了。好多了!