Jest中typeof检测函数是否存在始终返回false,求排查
解决Jest测试中typeof判断handleSubmit始终返回false的问题
看起来你的测试代码里有几个关键问题导致了这个结果,我来帮你逐一排查:
1. 错误的导入语法
你当前的导入语句混用了CommonJS解构和字符串路径,这在ES模块环境下完全无效:
const { handleSubmit } = '../client/js/formHandler'; // 错误写法
应该改成标准的ES模块import语法:
import { handleSubmit } from '../client/js/formHandler';
2. 导入顺序错误
babel-polyfill的导入必须放在所有其他代码的最前面,确保它先加载并生效:
import "babel-polyfill"; import { handleSubmit } from '../client/js/formHandler';
3. 确认formHandler.js的导出方式
还要保证你的formHandler.js里正确导出了handleSubmit函数:
- 如果是命名导出,写法应该是:
// formHandler.js export const handleSubmit = async () => { // 你的函数逻辑 }; - 如果是默认导出,测试文件的导入要对应调整:
// 测试文件里的导入 import handleSubmit from '../client/js/formHandler';
修改后的完整测试代码
import "babel-polyfill"; import { handleSubmit } from '../client/js/formHandler'; describe('Testing if function exists', () => { test('Should return true', async () => { // 可以简化成更直观的写法 expect(typeof handleSubmit).toBe('function'); }); });
额外排查点
- 检查文件路径是否正确:确认
../client/js/formHandler确实指向你的formHandler.js文件,路径层级错误会导致导入结果为undefined,typeof判断自然返回"undefined"而不是"function"。 - 若项目使用了特殊的Jest配置(比如TypeScript、自定义模块解析),可以检查
jest.config.js里的moduleFileExtensions或moduleDirectories设置,确保ES模块能被正确识别。
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

