我正在为一个动态导入另一个组件的苗条组件写一个测试。以下代码段是发生动态导入的部分。
async function importComponent() {
if (!dynamicComponent) {
dynamicComponent= (await import('../Component')).Component;
}
}
我的笑话配置(在 package.json 中)
"jest": {
"globals": {
"ts-jest": {
"isolatedModules": true,
"tsConfig": "./tsconfig.json",
}
},
"testEnvironment": "jsdom",
"verbose": true,
"transform": {
"^.+\\.svelte$": [
"svelte-jester",
{
"preprocess": true
}
],
"^.+\\.ts$": "ts-jest",
"^.+\\.js$": "babel-jest"
},
"setupFilesAfterEnv": [
"<rootDir>/setupTests.ts"
],
"moduleFileExtensions": [
"js",
"ts",
"svelte"
]
}
失败的测试
it('should open on click', async () => {
const { getByRole } = render(ComponentUnderTest, { ...dummyProps });
const loadComponentButton = getByRole('button');
await fireEvent(loadComponentButton, new MouseEvent('click', {
bubbles: true,
cancelable: true,
}));
});
我试图用 babel 插件"dynamic-import-node"
和/或"@babel/plugin-syntax-dynamic-import"
. 但结果是一样的。
我也尝试使用jest-next-dynamic
(用于使用 nextjs 动态导入语法模拟动态导入)
我也尝试模拟动态导入但没有任何成功 - 或者更确切地说我不知道如何模拟导入......
如果我在测试运行期间实际导入组件、预加载组件或只是模拟它,对我来说并不重要 - 测试应该只是运行而不会引发错误
如果我应该提供任何其他信息,请告诉我!
更新
测试失败并显示以下消息:
错误:您需要使用支持 VM API 中的 ES 模块的节点版本运行。请参阅https://jestjs.io/docs/ecmascript-modules。
我正在运行 Node v16.4.2 btw - 我尝试了链接中描述的解决方案,但结果是所有测试都失败了。也许我对如何执行测试的理解是错误的,但是我在 jsdom 环境中而不是在节点环境中运行测试,所以我并没有真正得到错误?
目前我的目标是以import()
某种方式模拟。