Тесты шутки — Пожалуйста, добавьте «импорт»отражающих метаданных»» в верхнюю часть вашей точки входа

#node.js #typescript #jestjs #tsyringe

#node.js #typescript #jestjs #tsyringe

Вопрос:

Я разрабатываю приложение, используя внедрение зависимостей tsyringe . Это пример службы, которая получает репозиторий как зависимость:

 import { injectable, inject } from 'tsyringe'

import IAuthorsRepository from '@domains/authors/interfaces/IAuthorsRepository'

@injectable()
export default class ListAuthorsService {
  constructor (
    @inject('AuthorsRepository')
    private authorsRepository: IAuthorsRepository
  ) {}
 

И контейнер зависимостей:

 import { container } from 'tsyringe'

import IAuthorsRepository from '@domains/authors/interfaces/IAuthorsRepository'
import AuthorsRepository from '@domains/authors/infra/typeorm/repositories/AuthorsRepository'

container.registerSingleton<IAuthorsRepository>(
  'AuthorsRepository',
  AuthorsRepository
)

export default container
 

В тестах я не хочу использовать зависимости, зарегистрированные в контейнере, а вместо этого передавать макет экземпляра через параметр.

 let authorsRepository: AuthorsRepositoryMock
let listAuthorsService: ListAuthorsService

describe('List Authors', () => {
  beforeEach(() => {
    authorsRepository = new AuthorsRepositoryMock()
    listAuthorsService = new ListAuthorsService(authorsRepository)
  })
 

Но я получаю следующую ошибку:

tsyringe требует полизаполнения reflect. Пожалуйста, добавьте «импорт»отражающих метаданных»» в верхнюю часть вашей точки входа.

Я подумал: «Возможно, мне потребуется импортировать пакет отражающих метаданных перед выполнением тестов». Итак, я создал jest.setup.ts файл, который импортирует reflect-metadata пакет. Но возникает другая ошибка:

Ошибка

Экземпляр репозитория каким-то образом не определен.

Я хотел бы спокойно запускать свои тесты.

Ответ №1:

Сначала создайте в корне вашего проекта an jest.setup.ts .

В вашем jest.config.js , найдите эту строку:

 // A list of paths to modules that run some code to configure or set up the testing framework before each test
// setupFilesAfterEnv: [],
 

раскомментируйте и добавьте свой jest.setup.ts путь к файлу.

 // A list of paths to modules that run some code to configure or set up the testing framework before each test
setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
 

Теперь импортируйте отражающие метаданные в jest.setup.ts :

 import 'reflect-metadata';
 

И снова запустите тесты.

Ответ №2:

Я столкнулся с той же проблемой здесь и, проведя рефакторинг теста, обнаружил, что сначала он должен импортировать зависимости, а затем класс сервиса, который будет тестироваться