TS-Node with Mocha 不使用 TS_NODE_PROJECT
TS-Node with Mocha doesn't use TS_NODE_PROJECT
当 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
。根据 Overriding `tsconfig.json` for ts-node in mocha
和 ts-node 文档,命令应该将正确的 tsconfig.json
路径传递给 ts-node。
将 src/tsconfig.json
移动到项目目录并 运行 使用相同的命令会导致测试成功。如何将 tsconfig.json
路径传递给 ts-node 以便测试正确编译?
哦。好尴尬...
TS_NODE_PROJECT='src/tsconfig.json' mocha --require ts-node/register src/*_test.ts
我发现将 mocha 设置移动到不同的文件中非常有用,因此 package.json 保持干净,您可以使用这样的 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
(或随意命名):
process.env.NODE_ENV = 'test'
process.env.TS_NODE_PROJECT = 'src/tsconfig.json'
当 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
。根据 Overriding `tsconfig.json` for ts-node in mocha
和 ts-node 文档,命令应该将正确的 tsconfig.json
路径传递给 ts-node。
将 src/tsconfig.json
移动到项目目录并 运行 使用相同的命令会导致测试成功。如何将 tsconfig.json
路径传递给 ts-node 以便测试正确编译?
哦。好尴尬...
TS_NODE_PROJECT='src/tsconfig.json' mocha --require ts-node/register src/*_test.ts
我发现将 mocha 设置移动到不同的文件中非常有用,因此 package.json 保持干净,您可以使用这样的 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
(或随意命名):
process.env.NODE_ENV = 'test'
process.env.TS_NODE_PROJECT = 'src/tsconfig.json'