Jest从24.x升级至27.0.0后报jasmine is not defined错误如何解决
问题原因
Jest 24.x及更早版本默认内置Jasmine作为测试运行器,会自动在测试运行环境注入全局jasmine对象,所以你不需要手动导入就可以直接使用。从Jest 27版本开始,官方将默认测试运行器从Jasmine切换为自研的jest-circus,这个运行器不再默认暴露全局jasmine对象,所以就会抛出ReferenceError: jasmine is not defined的错误。
解决方案
方案1:替换为Jest原生API(推荐)
不需要手动导入Jasmine,直接把Jasmine的spy写法替换为Jest自带的mock方法即可,性能和兼容性更好:
原代码写法:
getAutocompleteResults: jasmine.createSpy().and.returnValue({features: [{relevance: 1, meta: {}},{relevance: 0}]}),
替换后写法:
getAutocompleteResults: jest.fn().mockReturnValue({features: [{relevance: 1, meta: {}},{relevance: 0}]}),
方案2:兼容原有写法(不推荐长期使用)
如果你不想改动现有大量Jasmine语法的测试代码,可以修改Jest配置,将测试运行器切回Jasmine:
在你的jest配置项中新增:
"testRunner": "jasmine2"
该方案只是临时兼容,后续Jest版本会逐步降低对Jasmine运行器的支持,建议有条件还是替换为原生Jest API。
额外注意事项
如果使用TypeScript,确保你安装的@types/jest版本和当前使用的Jest版本匹配,避免出现类型报错。
内容的提问来源于stack exchange,提问作者lakeIn231
相关产品推荐
相关产品推荐

