Как запустить тесты Mocha, написанные в TypeScript?
Настройка: у меня есть проект Node (чистый Node, ни один бит браузера), написанный в TypeScript. Я могу использовать компилятор TypeScript (tsc
) из модуля typescript
для компиляции кода. Пока все хорошо.
Тем не менее, я хочу писать тесты с использованием Mocha, и там, где у меня возникают проблемы. Я пробовал --compilers ts:typescript
, но я продолжаю получать ошибки, например:
error TS5023: Unknown compiler option 'compilers'.
Похоже, что командная строка mocha
заканчивается передачей tsc
, что явно не очень хорошо.
Ответы
Ответ 1
Для тех, кто пытался и имел проблемы с typescript -require, вы можете попробовать ts-node.
$ npm install -g ts-node
$ mocha test.ts --require ts-node/register src/**/*.spec.ts
Также кажется, что существует некоторая текущая дискуссия об обесценивании typescript -require в пользу ts- node.
Ответ 2
Не используйте этот ответ. typescript -require не поддерживается, а ts- node является его заменой. Оставляя этот ответ здесь для потомков.
Нашел. Модуль typescript
на самом деле похож на "главную" функцию; он запускает компилятор, как только модуль загружается. Не очень красивый дизайн.
Я ткнул при приемочных тестах Mocha, которые показывают, как использовать собственный компилятор для файлов foo
. Они подключаются через механизм require.extensions
. Я был на полпути, написав модуль, который просто вызывает tsc
в командной строке, когда я понял, что кто-то должен был это сделать раньше. Это очень просто:
$ npm install typescript-require --save-dev
$ mocha --compilers ts:typescript-require
Ответ 3
Используя последнюю версию 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'));