ts-jest не компилирует модули с помощью require.resolve - PullRequest
0 голосов
/ 13 октября 2019

Я работаю на узле / сервере с 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 правильно скомпилировать этот файл, чтобы он работал в модульном тестировании?

...