如何运行用TypeScript编写的Mocha测试?

Tho*_*mas 35 mocha.js node.js typescript

设置:我有一个用TypeScript编写的Node项目(纯节点,没有浏览器位).我可以使用模块中的TypeScript编译器(tsc)typescript来编译代码.到现在为止还挺好.

但是,我想用Mocha编写测试,这就是我遇到麻烦的地方.我试过了--compilers ts:typescript,但我一直得到如下错误:

error TS5023: Unknown compiler option 'compilers'.
Run Code Online (Sandbox Code Playgroud)

它看起来像mocha最终被传递给命令行tsc,这显然是不好的.

jpi*_*son 51

对于任何曾经尝试过并且遇到过typescript-require问题的人,你可能想尝试使用ts-node.

$ npm install -g ts-node
$ mocha test.ts --require ts-node/register src/**/*.spec.ts
Run Code Online (Sandbox Code Playgroud)

似乎还有一些关于弃用typescript-require以支持ts-node的讨论正在进行中.

  • 什么是关于'src/**/*.spec.ts'的test.ts? (4认同)
  • 为了避免很多复杂问题,我采用了使用tsc编写的测试编译我的测试作为运行测试和确保生成源映射的前体.这允许我在VS Code中调试我的测试,而不依赖于typescript-require或ts-node. (3认同)
  • @jpierson你能让你的过程完整答案吗? (3认同)
  • @JamelToms 似乎不需要`test.ts`,最后一部分是在项目中查找所有测试的模式。这对我有用:`mocha --require ts-node/register src/**/*.spec.ts` (3认同)
  • 这似乎不再适用于摩卡,它给我最新版本的错误“未知文件扩展名“.ts””。 (3认同)
  • `typescript-require`已被弃用https://github.com/theblacksmith/typescript-require/issues/34#issuecomment-230915434 (2认同)

Tho*_*mas 10

不要使用这个答案.typescript-require是unmaintained,而ts-node是它的替代品.留下这个答案给后人.

找到了.该typescript模块实际上就像一个"主要"功能; 一旦加载模块,它就会运行编译器.不是很好的设计.

我嘲笑了Mocha的验收测试,它展示了如何使用自定义编译器来处理foo文件.他们通过require.extensions机制将其连接起来.tsc当我意识到某人之前必须完成此操作时,我正在编写一个只调用命令行的模块.所以这很简单:

$ npm install typescript-require --save-dev
$ mocha --compilers ts:typescript-require
Run Code Online (Sandbox Code Playgroud)


ToD*_*ond 6

使用最新版本的Mochats-node我遇到了意外的令牌导入问题。在ts-mocha中使用以下设置对我有用:

tsconfig.json

{
    "files": [
        "src/main.ts"
    ],
    "compilerOptions": {
        "noImplicitAny": true,
        "target": "es2015",
        "types": ["mocha"],
        "module": "commonjs"
    }
}
Run Code Online (Sandbox Code Playgroud)

包.json

"scripts": {
    "mocha": "ts-mocha -p library/tsconfig.json library/test/**/*.ts"
  },
Run Code Online (Sandbox Code Playgroud)

启动.json

{
    "type": "node",
    "request": "launch",
    "name": "Mocha Tests",
    "runtimeArgs": [
        "${workspaceFolder}/node_modules/ts-mocha/bin/ts-mocha",
        "--timeout", "999999",
        "-p",
        "${workspaceFolder}/library/tsconfig.json",
        "${workspaceFolder}/library/test/**/*.ts"
    ],
    "internalConsoleOptions": "openOnSessionStart"
}
Run Code Online (Sandbox Code Playgroud)

和 gulp.js 以防万一你也想使用 gulp

const gulp = require('gulp');
const ts = require('gulp-typescript');
const mocha = require('gulp-mocha');

const tsProject = ts.createProject('tsconfig.json');

gulp.task('build', () => tsProject.src()
  .pipe(tsProject())
  .js.pipe(gulp.dest('dist')));

gulp.task('test', () => gulp.src('test/*.spec.ts')
  .pipe(mocha({
    reporter: 'nyan',
    require: ['ts-node/register'],
  })));
/* single command to hook into VS Code */
gulp.task('default', gulp.series('build', 'test'));
Run Code Online (Sandbox Code Playgroud)


Sha*_*ahi 6

有一个mocha与 TypeScript 一起使用的更新解决方案,它使用tsx节点加载器。

首先,tsx使用以下命令安装软件包:

npm install --save-dev tsx
Run Code Online (Sandbox Code Playgroud)

然后,创建一个.mocharc.json包含以下内容的文件:

{
  "$schema": "https://json.schemastore.org/mocharc.json",
  "require": "tsx"
}
Run Code Online (Sandbox Code Playgroud)

现在您可以使用mochaTypeScript 了。

参考