在Jest测试文件中使用Flow出现test、expect未定义错误,如何解决?
解决Flow中
test和expect未定义的报错问题 你遇到的这个问题很常见——Flow默认不知道Jest提供的test、expect这些全局变量,所以会抛出未定义的错误。这里有几种靠谱的解决方法:
方法一:用flow-typed安装Jest的官方类型定义
flow-typed是Flow的官方类型定义仓库,专门提供各种第三方库的Flow类型声明,步骤如下:
- 先全局安装flow-typed工具(如果还没装的话):
npm install -g flow-typed - 进入你的项目根目录,运行下面的命令(替换成你实际使用的Jest版本号,比如
29.7.0):
这会在项目的flow-typed install jest@29.7.0flow-typed目录下生成Jest的类型定义文件,Flow会自动读取这些定义,test和expect的报错就会消失了。
方法二:手动声明全局变量(快速临时方案)
如果不想折腾flow-typed,也可以直接在你的test.js文件顶部添加全局变量的声明:
// @flow declare var test: (name: string, fn: () => void | Promise<void>) => void; declare var expect: (value: mixed) => any; import React from "react"; // ... 其他代码
或者你可以把这些声明放到项目根目录的flow-typed文件夹里的一个自定义文件(比如jest-global.js),这样所有测试文件都能共享这个声明,不用每个文件都写一遍。
方法三:配置Flow识别Jest环境
还有一种方式是在你的.flowconfig文件中添加Jest的环境配置,配合类型定义一起使用:
在.flowconfig的[options]区块里加上:
[options] jest=true
再确保有Jest的类型定义(比如通过方法一安装),Flow就能正确识别所有Jest全局变量了。
这些方法都能解决你遇到的问题,个人推荐方法一,因为它能提供最完整准确的Jest类型支持,后续其他Jest相关的API(比如beforeEach、afterAll)也不会再报错。
内容的提问来源于stack exchange,提问作者Ilja
相关产品推荐
相关产品推荐

