SyntaxError:在使用 mocha 运行测试时,无法在模块之外使用 import 语句引发错误

如何解决SyntaxError:在使用 mocha 运行测试时,无法在模块之外使用 import 语句引发错误

当我第一次开始使用它们时,我项目中的测试运行良好,目前它们完全停止工作。

每当我使用测试命令时,都会抛出以下错误

~/node_modules/csv-writer/src/test/csv-stringifiers/array.test.ts:1
import {resolveDelimiterChar} from '../helper/delimiter';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at wrapSafe (internal/modules/cjs/loader.js:979:16)
    at Module._compile (internal/modules/cjs/loader.js:1027:27)
    at Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Object.require.extensions.<computed> [as .ts] (~/node_modules/ts-node/src/index.ts:1045:43)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.exports.requireOrImport (~/backend/node_modules/mocha/lib/esm-utils.js:20:12)
    at Object.exports.loadFilesAsync (~/node_modules/mocha/lib/esm-utils.js:33:34)
    at Mocha.loadFilesAsync (~/node_modules/mocha/lib/mocha.js:431:19)
    at singleRun (~/node_modules/mocha/lib/cli/run-helpers.js:125:15)
    at exports.runMocha (~/node_modules/mocha/lib/cli/run-helpers.js:190:10)
    at Object.exports.handler (~/node_modules/mo

抛出的这个错误看起来好像在 csv-writer 模块中存在一些问题,但我似乎无法找出问题究竟是什么以及如果我不想删除它,我该如何运行测试包。

我的 package.json 文件

...
  "scripts": {
    "test": "cross-env GENSCRIP_PORT=3001 && cross-env GENSCRIP_SECRET=xxxx && cross-env GENSCRIP_DB_URL=mongodb://xxxx/genscrip_dev && cross-env GENSCRIP_BE_ENV=development && cross-env GENSCRIP_FE_URL=http://xxxx/ && npm run test:run","test:run": "mocha --require ts-node/register --watch-extensions ts './**/test/**/*.ts'","coverage": "tsc && nyc --reporter=lcov npm run test","start:dev": "nodemon --config nodemon.json ./src/index.ts","start": "npm run build && npm run start:node","start:node": "node ./dist/index.js","dev:debug": "nodemon --config nodemon.json --inspect-brk ./src/index.ts","build": "rimraf ./dist && tsc"
  },...
"dependencies": {
    "@elastic/elasticsearch": "^7.11.0","@types/cors": "^2.8.9","@types/nodemailer": "^6.4.0","@types/nodemailer-direct-transport": "^1.0.31","@types/nodemailer-smtp-transport": "^2.7.4","@types/uuid": "^8.3.0","bcryptjs": "^2.4.3","body-parser": "^1.19.0","cors": "^2.8.5","csv-parser": "^3.0.0","csv-writer": "^1.6.0","express": "^4.17.1","fuzzball": "^1.3.1","fuzzy": "^0.1.3","helmet": "^4.4.1","inversify": "^5.0.5","jsonwebtoken": "^8.5.1","moment": "^2.29.1","mongoose": "^5.11.10","morgan": "^1.10.0","nodemailer": "^6.4.18","uuid": "^8.3.2"
  },"devDependencies": {
    "@istanbuljs/nyc-config-typescript": "^1.0.1","@tsconfig/node12": "^1.0.7","@types/bcryptjs": "^2.4.2","@types/chai": "^4.2.14","@types/express": "^4.17.9","@types/jsonwebtoken": "^8.5.0","@types/mocha": "^8.2.0","@types/mongoose": "^5.10.3","@types/morgan": "^1.9.2","@types/node": "^14.14.37","@types/sinon": "^9.0.10","chai": "^4.2.0","cross-env": "^7.0.3","mocha": "^8.2.1","nodemon": "^2.0.4","nyc": "^15.1.0","reflect-Metadata": "^0.1.13","rimraf": "^3.0.2","sinon": "^9.2.4","source-map-support": "^0.5.19","ts-node": "^9.1.1","tslint": "^6.1.3","typescript": "^4.1.3"
  },"nyc": {
    "extends": "@istanbuljs/nyc-config-typescript","include": "src","exclude": "src/**/test/*","all": true,"check-coverage": true
  }

tsconfig.json

{
    "compilerOptions": {
        "module": "Commonjs","esModuleInterop": true,"target": "es6","noImplicitAny": true,"moduleResolution": "node","sourceMap": true,"outDir": "dist","baseUrl": ".","noEmit": false,"paths": {
            "@domain/*":["./src/domain"],"@data_entry/*":["./src/data_entry"],"*": [
                "node_modules/*"
            ]
        },"experimentalDecorators": true,"emitDecoratorMetadata": true,"lib": ["es6","dom"],"types": ["reflect-Metadata","mocha","node"]
    },"include": [
        "src/**/*","index.ts"    ],"exclude": [
            "src/tests/","node_modules/","dist/"
          ],}

我使用 nodejs v14.0.6 和 typescript 和 mocha 进行测试。

我做错了什么?

解决方法

我遇到了同样的问题。

显然,csv-writer 包包含测试,如堆栈跟踪中指定的 array.test.ts

这是用于运行 mocha 测试的脚本:

{
...    

test:run: "mocha --require ts-node/register --watch-extensions ts './**/test/**/*.ts'"

...
}

问题在于您递归地寻找以下模式: './**/test/**/*.ts'

如您所见,csv-writer 测试匹配指定的模式:

~/node_modules/csv-writer/src /test/ csv-stringifiers/array .test.ts

解决方案是在运行 mocha 测试时排除 node_modules 目录:

{
...    

test:run: "mocha --require ts-node/register --watch-extensions ts './{,!(node_modules)/**}/test/**/*.ts'"

...
}

希望这个回答对您有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?