【发布时间】: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