#reactjs #testing #jestjs #vite #esbuild
Вопрос:
я тестирую приложение React-Typescript с помощью Jest; мое приложение использует Vite в качестве пакета модулей. Проблема в том, что каждый раз, когда я запускаю тесты и jest сталкивается с инструкцией import.meta.ENV_VAR_NAME, я получаю следующую ошибку: «Синтаксическая ошибка: Невозможно использовать» import.meta «вне модуля»
Это мое jest.config.js файл:
module.exports = {
roots: ["<rootDir>/src"],
setupFilesAfterEnv: ["<rootDir>/jest/jest.setup.js"],
collectCoverageFrom: ["src//*.{js,jsx,ts,tsx}", "!src//.d.ts"],
testMatch: [
"<rootDir>/src//tests//.{js,jsx,ts,tsx}",
"<rootDir>/src/*/.{spec,test}.{js,jsx,ts,tsx}"
],
testEnvironment: "jsdom",
transform: {
// "^. .(js|jsx|mjs|cjs|ts|tsx)$": "esbuild-jest",
"^. .(js|jsx|mjs|cjs|ts|tsx)$": "@swc/jest",
"^. .scss$": "jest-scss-transform",
"^. .css$": "<rootDir>/jest/mocks/cssMock.js"
},
transformIgnorePatterns: [
"[/\]node_modules[/\]. .(js|jsx|mjs|cjs|ts|tsx)$",
"^. .module.(css|sass|scss)$"
],
watchPlugins: [
"jest-watch-typeahead/filename",
"jest-watch-typeahead/testname"
],
resetMocks: true,
moduleDirectories: ["node_modules", "src"],
moduleNameMapper: {
".worker": "<rootDir>/src/seo/mocks/workerMock.ts",
".(css|sass|scss)$": "identity-obj-proxy"
}
};
В ключе преобразования jest.config я попытался использовать @swc/jest и esbuild-jest, но ни один не исправил проблему import.meta; есть ли решение этой проблемы? Могу ли я достичь этого без использования Babel?
Заранее спасибо за ваше время
Комментарии:
1. Вы решили эту проблему? У меня тоже точно такая же проблема. Поэтому я обертываю код с помощью try~catch. подобный этому. « попробуйте { вернуть import.meta.env.VITE_GO_SERVER_URL; } поймать { вернуть ‘ локальный хост:8080 ‘; } «
2. @Ju-riJung да, я решил эту проблему; я изменил весь свой import.meta в process.env, чтобы не беспокоить шутку; что касается vite, с помощью плагина vite, называемого env-совместимым, во время компиляции преобразует process.env в import.meta, чтобы vite не беспокоили.