带有Mocha的TS节点不使用TS_NODE_PROJECT

时间:2019-02-04 02:52:50

标签: mocha ts-node

在使用ts-node进行Mocha测试时,我无法使用环境变量TS_NODE_PROJECT

项目结构如下:

src/
  main_test.ts
  tsconfig.json
package.json

在测试中,我想使用一个异步函数,该函数需要"lib": ["es2018"]作为编译选项。

// src/main_test.ts
describe('', () => {
    it('test', () => {
        (async function() {})()
    });
});

// src/tsconfig.json
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "sourceMap": true,
    "lib": ["es2018"]
  },
  "exclude": [
    "../node_modules"
  ]
}

要运行测试,我使用此命令,但会导致错误:

TS_NODE_PROJECT='src' && mocha --require ts-node/register src/*_test.ts
# TSError: ⨯ Unable to compile TypeScript:
# error TS2468: Cannot find global value 'Promise'.
# src/main_test.ts(3,10): error TS2705: An async function or method in ES5/ES3 requires the 'Promise' constructor.  Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option.

这意味着未使用src/tsconfig.json。根据{{​​3}}和ts-node文档,该命令应将正确的tsconfig.json路径传递到ts-node。

src/tsconfig.json移动到项目目录并运行相同的命令会使测试成功。如何将tsconfig.json路径传递到ts-node以便测试正确编译?

2 个答案:

答案 0 :(得分:2)

哦。多么尴尬...

TS_NODE_PROJECT='src/tsconfig.json' mocha --require ts-node/register src/*_test.ts

答案 1 :(得分:0)

我发现在不同文件中移动Mocha设置非常有用,因此package.json保持干净,您可以使用const oneSub = SubModel.getById(123); // SubModel const anotherSub = SubModel.getByChild(oneSub); // SubModel 文件,如下所示:

mocharc

,然后使用以下内容创建文件module.exports = { ignore: [ './test/helpers/**/*', './test/mocha.env.js' ], require: [ 'test/mocha.env', // init env here 'ts-node/register' ], extension: [ 'ts' ] } (或根据需要调用它):

test/mocha.env.js