How to run Mocha tests written in TypeScript?

后端 未结 3 1410
醉酒成梦
醉酒成梦 2020-12-24 01:32

Setup: I have a Node project (pure Node, no browser bits) written in TypeScript. I can use the TypeScript compiler (tsc) from the typescript module

相关标签:
3条回答
  • 2020-12-24 01:39

    Using the latest version of Mocha and ts-node I was getting an Unexpected token import issue. Using the below settings with ts-mocha worked for me:

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

    and gulp.js just incase you want to use gulp too

    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 讨论(0)
  • 2020-12-24 01:41

    For anybody who has tried and had problems with typescript-require you may want to try ts-node.

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

    It also appears that there has been some ongoing discussion about deprecating typescript-require in favor of ts-node.

    0 讨论(0)
  • 2020-12-24 01:47

    Don't use this answer. typescript-require is unmaintained, and ts-node is its replacement. Leaving this answer here for posterity.

    Found it. The typescript module is actually like a "main" function; it runs the compiler as soon as the module is loaded. Not very nice design.

    I poked at Mocha's acceptance tests, which show how to use a custom compiler for foo files. They wire it up via the require.extensions mechanism. I was halfway through writing a module that just calls tsc on the command line when I realized that somebody must have done this before. So it's very simple:

    $ npm install typescript-require --save-dev
    $ mocha --compilers ts:typescript-require
    
    0 讨论(0)
提交回复
热议问题