Подтвердить что ты не робот

Как запустить тесты Mocha, написанные в TypeScript?

Настройка: у меня есть проект Node (чистый Node, ни один бит браузера), написанный в TypeScript. Я могу использовать компилятор TypeScript (tsc) из модуля typescript для компиляции кода. Пока все хорошо.

Тем не менее, я хочу писать тесты с использованием Mocha, и там, где у меня возникают проблемы. Я пробовал --compilers ts:typescript, но я продолжаю получать ошибки, например:

error TS5023: Unknown compiler option 'compilers'.

Похоже, что командная строка mocha заканчивается передачей tsc, что явно не очень хорошо.

4b9b3361

Ответ 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'));