Jest error with vanilla JS submodules: SyntaxError: Cannot use import statement outside a module
Jest error with vanilla JS submodules: SyntaxError: Cannot use import statement outside a module
我有一个使用子模块中的模块的函数,当我尝试 运行 测试时,它失败并显示 SyntaxError: Cannot use import statement outside a module
。
如果我 运行 从模块加载和执行的普通文件调用代码,所以我确定问题出在我的 Jest 配置上,而不是我的代码上,但看起来像 import
我的子模块中的语句因 Jest 而失败。
子模块在 .helpers
文件夹中。
Translator/index.js
import { Excel } from './excel.js'
import { Auth } from '../.helpers/Helpers/auth.js'
import { secret } from '../.helpers/Helpers/secret.js'
/**
* Read the request and add it to the queue
* @param {object} context The context from Azure
* @param {{ contentBytes: string, translations: { Title: string, Term: string }[] }} req The request object
*/
async function start (context, req) {
...
}
Translator/package.json
{
...
"type": "module",
"scripts": {
"test": "jest --coverage --coverageDirectory=coverage",
"local": "node ./Translator/local.js",
"check-package": "npm-check",
"update": "npm-check -u",
"postinstall": "submodules-install"
},
"jest": {
"setupFiles": [
"<rootDir>/.jest/init.js",
"<rootDir>/.jest/console.js"
],
"collectCoverageFrom": [
"Translator/**/*test.js"
],
"testPathIgnorePatterns": [
"<rootDir>/.helpers/"
],
"coverageReporters": [
"text",
"cobertura",
"html"
],
"reporters": [
"default",
"jest-junit"
]
},
"jest-junit": {
"outputDirectory": "coverage",
"outputName": "test-results.xml",
"usePathForSuiteName": "true"
},
"submodules": [
".helpers"
],
...
如果我将子模块文件移动到 src 文件夹,Jest 运行s 通常 :(
这是子模块的package.json
。
.helper/package.json
{
...
"type": "module",
"scripts": {
"test": "jest --coverage --coverageDirectory=coverage",
"build": "tsc",
"check-package": "npm-check",
"update": "npm-check -u"
},
"jest": {
"setupFiles": [
"<rootDir>/.jest/init.js",
"<rootDir>/.jest/console.js"
],
"coverageReporters": [
"text",
"cobertura",
"html"
],
"reporters": [
"default",
"jest-junit"
]
},
"jest-junit": {
"outputDirectory": "coverage",
"outputName": "test-results.xml",
"usePathForSuiteName": "true"
},
...
}
我不使用 Babel 或任何转译工具,它是纯香草 JavaScript,但我有一个 .babelrc
文件,所以 VSCode 上的 Eslint 理解私有方法,但我只是注意到它上面有一些关于“测试”的东西,所以它可能是相关的。
.babelrc
{
"presets": [
["@babel/preset-env",
{
"shippedProposals": true
}]
],
"env": {
"test": {
"plugins": ["@babel/plugin-transform-runtime"]
}
}
}
知道我缺少什么配置吗?
所以...我将 .babelrc
重命名为 babel.config.json
并且它正在运行。我没有改变任何其他东西!
我只是把这个问题留在这里,所以如果有人遇到类似的事情,他们就会知道解决方案。
我有一个使用子模块中的模块的函数,当我尝试 运行 测试时,它失败并显示 SyntaxError: Cannot use import statement outside a module
。
如果我 运行 从模块加载和执行的普通文件调用代码,所以我确定问题出在我的 Jest 配置上,而不是我的代码上,但看起来像 import
我的子模块中的语句因 Jest 而失败。
子模块在 .helpers
文件夹中。
Translator/index.js
import { Excel } from './excel.js'
import { Auth } from '../.helpers/Helpers/auth.js'
import { secret } from '../.helpers/Helpers/secret.js'
/**
* Read the request and add it to the queue
* @param {object} context The context from Azure
* @param {{ contentBytes: string, translations: { Title: string, Term: string }[] }} req The request object
*/
async function start (context, req) {
...
}
Translator/package.json
{
...
"type": "module",
"scripts": {
"test": "jest --coverage --coverageDirectory=coverage",
"local": "node ./Translator/local.js",
"check-package": "npm-check",
"update": "npm-check -u",
"postinstall": "submodules-install"
},
"jest": {
"setupFiles": [
"<rootDir>/.jest/init.js",
"<rootDir>/.jest/console.js"
],
"collectCoverageFrom": [
"Translator/**/*test.js"
],
"testPathIgnorePatterns": [
"<rootDir>/.helpers/"
],
"coverageReporters": [
"text",
"cobertura",
"html"
],
"reporters": [
"default",
"jest-junit"
]
},
"jest-junit": {
"outputDirectory": "coverage",
"outputName": "test-results.xml",
"usePathForSuiteName": "true"
},
"submodules": [
".helpers"
],
...
如果我将子模块文件移动到 src 文件夹,Jest 运行s 通常 :(
这是子模块的package.json
。
.helper/package.json
{
...
"type": "module",
"scripts": {
"test": "jest --coverage --coverageDirectory=coverage",
"build": "tsc",
"check-package": "npm-check",
"update": "npm-check -u"
},
"jest": {
"setupFiles": [
"<rootDir>/.jest/init.js",
"<rootDir>/.jest/console.js"
],
"coverageReporters": [
"text",
"cobertura",
"html"
],
"reporters": [
"default",
"jest-junit"
]
},
"jest-junit": {
"outputDirectory": "coverage",
"outputName": "test-results.xml",
"usePathForSuiteName": "true"
},
...
}
我不使用 Babel 或任何转译工具,它是纯香草 JavaScript,但我有一个 .babelrc
文件,所以 VSCode 上的 Eslint 理解私有方法,但我只是注意到它上面有一些关于“测试”的东西,所以它可能是相关的。
.babelrc
{
"presets": [
["@babel/preset-env",
{
"shippedProposals": true
}]
],
"env": {
"test": {
"plugins": ["@babel/plugin-transform-runtime"]
}
}
}
知道我缺少什么配置吗?
所以...我将 .babelrc
重命名为 babel.config.json
并且它正在运行。我没有改变任何其他东西!
我只是把这个问题留在这里,所以如果有人遇到类似的事情,他们就会知道解决方案。