开玩笑,ES6 模块“不提供导出命名”

tho*_*leb 3 unit-testing node.js express jestjs

我有一个带有 CRUD API(带有sequelize)的 Express 应用程序,我想用 Jest 测试它。我对单元测试还很陌生,所以我遵循Jest 网站推荐的本指南

\n

我遇到的问题是我的应用程序是使用 ES6 模块构建的,而 Jest ES6 模块是实验性的,它似乎没有“导入”包。

\n

我有这个测试(取自指南)

\n
import request from \'supertest\';\nimport app from \'../app\';\n\ndescribe(\'Test the root path\', () => {\n    test(\'It should response the GET method\', done => {\n        request(app)\n            .get(\'/\')\n            .then(response => {\n                expect(response.statusCode).toBe(404);\n                done();\n            });\n    });\n});\n
Run Code Online (Sandbox Code Playgroud)\n

当我启动它时(NODE_OPTIONS=--experimental-vm-modules npx jest我必须遵循这个笑话维基页面),它说

\n

\'sequelize\' does not provide an export named \'DataTypes\'当我正常启动我的应用程序时(比如npm start)时,它工作正常,没有任何问题。

\n

(完整的错误日志):

\n
(node:49576) ExperimentalWarning: VM Modules is an experimental feature. This feature could change at any time\n(Use `node --trace-warnings ...` to show where the warning was created)\n FAIL  __tests__/app_test.js\n  \xe2\x97\x8f Test suite failed to run\n\n    SyntaxError: The requested module \'sequelize\' does not provide an export named \'DataTypes\'\n\n      at Runtime.linkAndEvaluateModule (node_modules/jest-runtime/build/index.js:779:5)\n      at TestScheduler.scheduleTests (node_modules/@jest/core/build/TestScheduler.js:333:13)\n      at runJest (node_modules/@jest/core/build/runJest.js:404:19)\n      at _run10000 (node_modules/@jest/core/build/cli/index.js:320:7)\n      at runCLI (node_modules/@jest/core/build/cli/index.js:173:3)\n
Run Code Online (Sandbox Code Playgroud)\n

(和我的 Jest 配置)

\n
// Sync object\n/** @type {import(\'@jest/types\').Config.InitialOptions} */\n\nexport default async () => {\n    return {\n        verbose: true,\n        transform: {},\n    };\n};\n
Run Code Online (Sandbox Code Playgroud)\n

难道我做错了什么 ?我应该改为 commonJS 而不是 ES6

\n

谢谢。

\n

ral*_*stx 6

这是 Jest 中的一个已知问题:#9771。据说已修复jest@28.0.0-alpha.0

解决此问题的一个有趣的技巧main是从package.json导入项目的 中删除该字段。

  • 我升级到 Jest@28.0.3,这为我解决了这个问题。 (2认同)