Тестирование проекта библиотеки компонентов React с использованием Vite.

Вопрос или проблема

У меня есть проект библиотеки, использующий TS, React и vite в качестве сборщика. Структура папок выглядит следующим образом

- LibraryProject
 - src
  - main
   - TestComponent.tsx
  - hooks
   - hookFile.ts
  - enums
   - enumFile.enum.ts

Моя текущая конфигурация vite правильно собирает библиотеку, и я могу использовать её в отдельном демонстрационном проекте на React.

Чтобы импортировать мой проект библиотеки в демонстрационный проект на React, я использую команду по умолчанию npm install, за которой следует ../pathToLibraryProject. Как только проект связан, я могу ссылаться на основной файл, но не могу импортировать перечисления или хуки.

Текущий оператор импорта,

import TestComponent, { enumA } from "library-project";

TestComponent, как я упоминал, корректно импортируется, но ENUM_A — нет.

Ошибка,

ERROR in ./src/App.js 46:22-39
export 'enumA' (imported as 'enumA') was not found in 'library-project' (possible exports: default)

Может кто-нибудь подсказать, что можно сделать, чтобы это исправить?

Спасибо.

Ответ или решение

Для успешного тестирования библиотеки компонентов React, разработанной с использованием TypeScript и Vite, необходимо учитывать несколько аспектов конфигурации вашей сборки и структуру экспорта модулей. В вашем случае проблема заключается в том, что вы правильно импортируете компонент, но не можете получить доступ к перечислениям и хукам. Рассмотрим, как можно исправить эту ситуацию и организовать тестирование библиотеки.

Структура проекта

Предположим, что ваша структура проекта выглядит следующим образом:

LibraryProject
 ├─ src
 │  ├─ main
 │  │  └─ TestComponent.tsx
 │  ├─ hooks
 │  │  └─ hookFile.ts
 │  └─ enums
 │     └─ enumFile.enum.ts
 └─ package.json

Проблема с экспортом

Ошибка, на которую вы натолкнулись, указывает на то, что enumA не экспортируется правильно. Убедитесь, что ваши перечисления и хуки экспортируются из соответствующих файлов.

Пример экспорта перечислений

В файле enumFile.enum.ts добавьте экспорт перечисления следующим образом:

export enum enumA {
  VALUE1,
  VALUE2,
}

Пример экспорта хуков

Если у вас есть хуки в hookFile.ts, убедитесь, что они также экспортируются:

export const useCustomHook = () => {
  // логика вашего хука
};

Обновление основного файла экспорта

Если вы хотите, чтобы все ваши компоненты, хуки и перечисления были доступны из одного файла (например, index.ts), создайте файл index.ts в директории src и добавьте туда следующие экспорты:

// src/index.ts
export { default as TestComponent } from './main/TestComponent';
export * from './hooks/hookFile';
export * from './enums/enumFile.enum';

Теперь, когда вы импортируете из библиотеки, все элементы будут доступны:

import TestComponent, { enumA, useCustomHook } from 'library-project';

Настройка Vite

Для корректной работы библиотек с TypeScript и React убедитесь, что ваш файл vite.config.ts настроен правильно:

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import path from 'path';

export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'), // Упрощение импортов
    },
  },
  build: {
    lib: {
      entry: path.resolve(__dirname, 'src/index.ts'), // Входной файл для библиотек
      name: 'LibraryProject',
      formats: ['es', 'umd'], // Форматы сборки
      fileName: (format) => `library-project.${format}.js`,
    },
    rollupOptions: {
      external: ['react', 'react-dom'], // Исключение внешних зависимостей
      output: {
        globals: {
          react: 'React',
          'react-dom': 'ReactDOM',
        },
      },
    },
  },
});

Тестирование компонентов

Для тестирования React-компонентов можно использовать Jest вместе с React Testing Library. Если у вас еще нет настроенного Jest, установите необходимые зависимости:

npm install --save-dev jest @testing-library/react @testing-library/jest-dom ts-jest

Создайте файл конфигурации jest.config.js:

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'jsdom',
  transform: {
    '^.+\\.tsx?$': 'ts-jest',
  },
  moduleNameMapper: {
    '\\.(css|less)$': '<rootDir>/__mocks__/styleMock.js', // Мокирование стилей
  },
};

Пример теста для вашего компонента

Создайте файл TestComponent.test.tsx:

import { render, screen } from '@testing-library/react';
import TestComponent from './TestComponent';

test('renders TestComponent', () => {
  render(<TestComponent />);
  const linkElement = screen.getByText(/ваш текст/i);
  expect(linkElement).toBeInTheDocument();
});

Теперь вы сможете запускать тестирование при помощи команды:

npm test

Заключение

Таким образом, убедитесь, что все ваши компоненты, хуки и перечисления правильно экспортируются в библиотеке. Обновите конфигурацию Vite для поддержки библиотечного формата. Это поможет вам не только устранить текущие ошибки, но и обеспечить удобное использование библиотеки в других проектах. Настройка тестирования также станет важным шагом в поддержке качества вашего кода.

Оцените материал
Добавить комментарий

Капча загружается...