#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
этом может помочь:
- Установите вышеуказанный пакет с
yarn add --dev tsconfig-paths
- В
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
этом может помочь:
- Установите вышеуказанный пакет с
yarn add --dev tsconfig-paths
- В
global-setup
файл добавьтеrequire('tsconfig-paths/register');
в самом начале файла.
Весь абсолютный импорт должен работать.