web-dev-qa-db-ja.com

TypeScriptで記述されたMochaテストを実行する方法は?

セットアップ:TypeScriptで記述されたNodeプロジェクト(純粋なNode、ブラウザビットなし))があります。tscからTypeScriptコンパイラ(TypeScript)を使用できますコードをコンパイルするモジュール。

ただし、Mochaを使用してテストを作成したいので、そこに問題があります。私は試した --compilers ts:TypeScript、しかし、私は次のようなエラーが出続けます:

error TS5023: Unknown compiler option 'compilers'.

mochaへのコマンドラインがtscに渡されるように見えますが、これは明らかに良くありません。

32
Thomas

TypeScript-requireを試して問題を抱えた人は、 ts-node を試してみてください。

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

また、ts-nodeを優先してTypeScript-requireを非推奨にすることについて 進行中の議論 があったようです。

47
jpierson

この回答は使用しないでください。TypeScript-requireはメンテナンスされておらず、ts-nodeはその代替品です。この回答を後世に残してください。

それを見つけた。 TypeScriptモジュールは、実際には「メイン」関数のようなものです。モジュールがロードされるとすぐにコンパイラーが実行されます。あまり素敵なデザインではありません。

fooファイルにカスタムコンパイラを使用する方法を示す、Mochaの受け入れテストを調べました。彼らはrequire.extensionsメカニズム。以前に誰かがこれをやったに違いないと気付いたとき、コマンドラインでtscを呼び出すモジュールを書く途中でした。とても簡単です:

$ npm install TypeScript-require --save-dev
$ mocha --compilers ts:TypeScript-require
10
Thomas

最新バージョンの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'));
0
ToDevAndBeyond