Jest识别it()测试但无法识别test()测试的问题排查
test()报错但it()正常的问题 这种情况确实挺闹心的——明明it('foo', () => {...})跑得好好的,换成test()就直接报“Your test suite must contain at least one test.”,而且还是最新版Jest,我来给你捋几个大概率能解决的方向:
检查
test变量是否被意外覆盖
有时候我们自己的代码或者引入的依赖会不小心把全局的test变量给覆盖了。你可以在测试文件的最顶部加一行调试代码:console.log('test变量值:', test);运行测试后如果输出是
undefined或者不是Jest的测试函数,那肯定是哪里把test给重定义了。比如有没有文件里写了const test = 'xxx'这种代码?或者某个第三方库导出了叫test的变量?找到后改个名字就行。核对Jest全局变量配置
虽然新版Jest默认把test和it设为等价的全局函数,但难保配置里有特殊设置。打开你的jest.config.js(如果没有就新建一个),检查有没有globals字段把test设为false了:// 错误示例,要避免 module.exports = { globals: { test: false } }如果有这种配置,删掉或者改成
test: true就行。排查Babel的干扰
你用了@babel/preset-env和@babel/preset-react,有没有可能Babel的某个插件或者预设把test标识符给处理了?比如tree-shaking误把test当成无用代码,或者某个插件做了变量替换。可以试试在测试里直接调用全局的test:global.test('测试全局test', () => { expect(true).toBe(true); });如果这样能运行,说明局部的
test被Babel处理没了。这时候可以在babel.config.js里给测试文件加个例外,比如:module.exports = { presets: ['@babel/preset-env', '@babel/preset-react'], env: { test: { plugins: ['@babel/plugin-transform-modules-commonjs'] // 确保这里没有会影响test变量的插件 } } }清除Jest缓存
有时候缓存会残留旧的配置,导致奇怪的问题。跑一下这个命令清除缓存:jest --clearCache然后重新运行测试,说不定就好了。
确认测试文件的匹配规则
虽然it能用说明文件是被Jest识别的,但保险起见,确认你的测试文件名符合Jest默认的匹配规则:比如后缀是.test.js/.spec.js,或者放在__tests__文件夹里。如果自定义了testMatch配置,也要确保当前测试文件能被匹配到。
内容的提问来源于stack exchange,提问作者Spadar Shut

