【问题标题】:Jest, ES6 modules "does not provide export named"开玩笑,ES6 模块“不提供导出命名”
【发布时间】:2022-02-14 04:54:16
【问题描述】:

我有一个带有 CRUD API(带有 sequelize)的 express 应用,我想用 Jest 对其进行测试。我是单元测试的新手,所以我遵循guide 的建议,由Jest's website 推荐。

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

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

import request from 'supertest';
import app from '../app';

describe('Test the root path', () => {
    test('It should response the GET method', done => {
        request(app)
            .get('/')
            .then(response => {
                expect(response.statusCode).toBe(404);
                done();
            });
    });
});

当我启动它时(使用NODE_OPTIONS=--experimental-vm-modules npx jest 我必须关注这个jest wiki page),它说

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

(完整的错误日志):

(node:49576) ExperimentalWarning: VM Modules is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
 FAIL  __tests__/app_test.js
  ● Test suite failed to run

    SyntaxError: The requested module 'sequelize' does not provide an export named 'DataTypes'

      at Runtime.linkAndEvaluateModule (node_modules/jest-runtime/build/index.js:779:5)
      at TestScheduler.scheduleTests (node_modules/@jest/core/build/TestScheduler.js:333:13)
      at runJest (node_modules/@jest/core/build/runJest.js:404:19)
      at _run10000 (node_modules/@jest/core/build/cli/index.js:320:7)
      at runCLI (node_modules/@jest/core/build/cli/index.js:173:3)

(和我的 Jest 配置)

// Sync object
/** @type {import('@jest/types').Config.InitialOptions} */

export default async () => {
    return {
        verbose: true,
        transform: {},
    };
};

我做错了吗?我应该改用 commonJS 而不是 ES6

谢谢。

【问题讨论】:

  • Node 本身不支持导入/导出,您可能已经知道了。您是否通过 babel 解析代码?在这种情况下,您可以使用 babel-jest 之类的东西。如果是 Typscript,则有 ts-jest 等等。

标签: node.js express unit-testing jestjs


【解决方案1】:

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

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

【讨论】:

  • 我升级到 Jest@28.0.3 并为我解决了这个问题。
猜你喜欢
  • 2018-07-25
  • 2019-11-04
  • 1970-01-01
  • 2020-09-17
  • 2021-05-30
  • 2018-09-14
  • 2020-06-11
  • 1970-01-01
  • 2021-08-14
相关资源
最近更新 更多