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的讨论正在进行中.
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)
使用最新版本的Mocha和ts-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)
有一个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 了。