提问者:小点点

在Jest上嘲弄“非严格”遗留模块时出错


我在javascript上有一些非常混乱的,不严格兼容的遗留代码,在NodeJS12上运行得很好,我正在尝试将其抽象出来,并使用jest/mocks测试叠加的,新的代码层。

但是当我尝试运行测试时,我收到以下错误:

Test suite failed to run

SyntaxError: /legacy-path/messy_legacy_code.js: Legacy octal literals are not allowed in strict mode (557:66)
at Parser._raise (node_modules/@babel/parser/src/parser/error.js:60:45)

我试图在测试代码中首先模拟它,但仍然得到了这个错误。 看来Jest正试图用巴别塔来解析它; 它在那里真的找不到任何合规的代码。。。 它只在节点上运行,其他什么都不运行。

我已经尝试过模仿遗留代码本身,也尝试过制作一个容器来“抽象”它并模仿容器。 但是Jest似乎仍然试图读取它背后的每一个不兼容的代码。

我的modern.test.js代码如下所示:

jest.mock('../../../../legacy-path/messy-container')
const { ModernLayer } = require('../../../../modern-path/modern-module');

有什么想法,我如何才能完全阻止Jest试图阅读这个不符合的代码,并只是嘲弄它?


共1个答案

匿名用户

jest.mock('...')执行自动模拟,除非使用了__mocks__中的模拟。 它处理模块导出,并因语法错误而失败。

则应手动模拟该模块:

jest.mock('../../../../legacy-path/messy-container', () => ({ ModernLayer: ... }));