Я работаю на узле / сервере с prisma / nexus, и при реализации внешних процессоров для очередей Bull, использующих require.resolve('path/to/ts/module')
, ts-node-dev компилирует все, и очередь работает как чудо, однако ts-jest разрешаетсямодуль, но выдает SyntaxError для импорта с помощью import { some } from 'module/path'
внутри разрешенного модуля.
Хотя ts-jest разрешает модуль, кажется, что он компилируется с ES3 (который я считаю целевой по умолчанию), а не с ESNext, которыйэто тот файл, который указан в ts-config.json:
{
"compilerOptions": {
"target": "ESNext",
"module": "commonjs",
"allowJs": true,
"outDir": "dist",
"strict": true,
"moduleResolution": "node",
"resolveJsonModule": true,
"baseUrl": "./",
"paths": {
"*": [
"node_modules/*",
"src/types/*"
]
},
"allowSyntheticDefaultImports": true,
"esModuleInterop": true ,
"traceResolution":true
},
"include": [
"src/**/*"
],
}
jest-config.js загружает тот же файл ts-config:
module.exports = {
preset: 'ts-jest',
globals: {
'ts-jest': {
tsConfig: 'tsconfig.json'
}
},
globalSetup: './tests/config/globalSetup.js',
globalTeardown: './tests/config/globalTeardown.js',
moduleFileExtensions: [ 'ts', 'js' ],
transform: {
'^.+\\.(ts|tsx)$': "ts-jest"
},
testMatch: [
'**/tests/**/*.test.(ts)'
],
testEnvironment: 'node',
verbose: true
};
В очереди, которую я вызываю процессором сrequire.resolve:
emailQueue.process(
'sendVerificationEmail',
require.resolve('./processors/email/send-verification-email')
)
Он разрешает модуль send-verify-email.ts при запуске некоторых тестов:
// send-verification-email.ts
import {sendEmail} from '../../../helpers/email.handler'
export default async function(job:any) {
const { to, subject, text } = job.data
await sendEmail(
to,
subject,
text,
job.data.templateFileName || null,
job.data.context || {}
)
}
Но затем выдает ts-jest:
import { sendEmail } from '../../../helpers/email.handler'
^
SyntaxError: Unexpected token {
at Module._compile (internal/modules/cjs/loader.js:723:23)
В примерах и документации Bull это способ работы с внешними процессорами, и он на самом деле работает через ts-node-dev, но в документации ничего не говорится об использовании его в jest / ts-jest ...
Как я могу сделать маke ts-jest правильно скомпилировать этот файл, чтобы он работал в модульном тестировании?