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

时间:2014-11-17 16:53:40

标签: node.js typescript mocha

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

但是,我想用Mocha编写测试,以及我遇到麻烦的地方。我尝试了--compilers ts:typescript,但我一直收到错误:

error TS5023: Unknown compiler option 'compilers'.

看起来mocha的命令行最终被传递给tsc,这显然不太好。

3 个答案:

答案 0 :(得分:46)

对于尝试过 typescript-require 的任何人,您可能想尝试ts-node

$ npm install -g ts-node
$ mocha test.ts --require ts-node/register src/**/*.spec.ts

似乎有一些ongoing discussion关于弃用typescript-require以支持ts-node。

答案 1 :(得分:10)

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

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

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

$ npm install typescript-require --save-dev
$ mocha --compilers ts:typescript-require

答案 2 :(得分:0)

使用最新版本的 Mocha ts-node ,我遇到了意外令牌导入问题。将以下设置与ts-mocha配合使用对我来说有效:

tsconfig.json

{
    "files": [
        "src/main.ts"
    ],
    "compilerOptions": {
        "noImplicitAny": true,
        "target": "es2015",
        "types": ["mocha"],
        "module": "commonjs"
    }
}

package.json

"scripts": {
    "mocha": "ts-mocha -p library/tsconfig.json library/test/**/*.ts"
  },

launch.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"
}

和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'));
相关问题