Нетестовые файлы машинописного текста, не обработанные TS-Jest. Не удается найти модуль с абсолютным путем во время выполнения

#typescript #jestjs #ts-jest

Вопрос:

У меня есть проект с настройкой тестов E2E с драматургом TS-Jest. Для организации своих тестов я использую Объектную модель страницы. Структура выглядит так:

введите описание изображения здесь

Я хотел использовать paths опцию TypeScript tsconfig.json для очистки импорта как в тестовых файлах, так и в классах POM. После некоторых проб и ошибок я придумал следующие конфигурационные файлы:

 // tsconfig.json
{
    "compilerOptions": {
        "target": "es6",
        "lib": ["dom", "dom.iterable", "esnext"],
        "strict": true,
        "module": "commonjs",
        "noEmit": true,
        "types": ["@types/jest", "jest-playwright-preset"],
        "resolveJsonModule": true,
        "esModuleInterop": true,
        "baseUrl": "src",
        "paths": {
            "models": ["models"],
            "models/*": ["models/*"],
            "config": ["../config"]
        }
    },
    "include": ["./src/**/*.ts"]
}

 
 // jest.config.ts
import type { Config } from '@jest/types';
import playwrightPreset from 'jest-playwright-preset/jest-preset.json';

import { pathsToModuleNameMapper } from 'ts-jest/utils';
import { compilerOptions } from './tsconfig.json';

const config: Config.InitialOptions = {
    ...playwrightPreset,
    testRunner: 'jasmine2',
    setupFilesAfterEnv: [
        ...playwrightPreset.setupFilesAfterEnv,
    ],
    testMatch: ['**/__tests__/**/*. (ts|js)', '**/?(*.) (spec|test). (ts|js)'],
    transform: {
        '^. \.(ts)

Импорт, как

 // src/tests/home.test.ts
import { baseUrl, username, password } from 'config';
import { LoginPage, CookiesModal, NavbarComponent, SurveyEditPage } from 'models';
 

работайте правильно в тестовых файлах и не создавайте никаких проблем. Проблемы возникают, когда я пытаюсь использовать их в любом из других файлов, например.

 // src/global-setup.ts
import type { Config as JestConfig } from '@jest/types';
import { chromium, Page } from 'playwright';
import { username, password } from 'config';
import { CookiesModal, LoginPage } from './models';
 

Хотя TypeScript ни на что не жалуется в коде Visual Studio, при запуске тестов с yarn test помощью я получил ошибку

 Error: Cannot find module 'config'
 

Я думаю, что это выглядит так, как будто другие файлы TS не обрабатываются TS-Jest или чем-то еще. Хотя, возможно, я совершенно не прав. Любые решения высоко ценятся

Комментарии:

1. можете ли вы помочь предоставить репозиторий github ?

Ответ №1:

Мне удалось найти решение этой проблемы с GitHub: https://github.com/kulshekhar/ts-jest/issues/1107#issuecomment-559759395

Короче говоря, по умолчанию ts-jest преобразование вызывается позже, чем должно, поэтому у него нет возможности обработать все файлы. В tsconfig-paths этом может помочь:

  1. Установите вышеуказанный пакет с yarn add --dev tsconfig-paths
  2. В global-setup файл добавьте require('tsconfig-paths/register'); в самом начале файла.

Весь абсолютный импорт должен работать.

: 'ts-jest',
},
moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, {
prefix: '<rootDir>/src',
}),
};
Импорт, как


работайте правильно в тестовых файлах и не создавайте никаких проблем. Проблемы возникают, когда я пытаюсь использовать их в любом из других файлов, например.


Хотя TypeScript ни на что не жалуется в коде Visual Studio, при запуске тестов с yarn test помощью я получил ошибку


Я думаю, что это выглядит так, как будто другие файлы TS не обрабатываются TS-Jest или чем-то еще. Хотя, возможно, я совершенно не прав. Любые решения высоко ценятся

Комментарии:

1. можете ли вы помочь предоставить репозиторий github ?

Ответ №1:

Мне удалось найти решение этой проблемы с GitHub: https://github.com/kulshekhar/ts-jest/issues/1107#issuecomment-559759395

Короче говоря, по умолчанию ts-jest преобразование вызывается позже, чем должно, поэтому у него нет возможности обработать все файлы. В tsconfig-paths этом может помочь:

  1. Установите вышеуказанный пакет с yarn add --dev tsconfig-paths
  2. В global-setup файл добавьте require('tsconfig-paths/register'); в самом начале файла.

Весь абсолютный импорт должен работать.