TS-узел с Mocha не использует TS_NODE_PROJECT
У меня проблемы с использованием переменной env TS_NODE_PROJECT
когда ts-node используется для тестирования с использованием Mocha.
Структура проекта выглядит следующим образом:
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
не используется В соответствии с переопределением `tsconfig.json` для ts-node в mocha и документацией ts-node, команда должна передать правильный tsconfig.json
путь к ц-узлу.
перемещение src/tsconfig.json
проектировать каталог и выполнение той же команды приводит к успешному выполнению теста. Как я могу передать tsconfig.json
путь к ts-узлу, чтобы тест правильно компилировался?
1 ответ
Ой. Как неловко...
TS_NODE_PROJECT='src/tsconfig.json' mocha --require ts-node/register src/*_test.ts
Я считаю очень полезным переместить настройку мокко в разные файлы, чтобы 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'