nestjs typeorm Test.createTestingModule ConnectionNotFoundError: Connection "default" was not found. .spec.ts Ошибка
Primary tabs
В тесте для сервиса, использующего TypeOrm получаем:
ConnectionNotFoundError: Connection "default" was not found.
Суть проблемы в нашем случае кратко:
в конструкторе сервиса явно вызывался метод getManager():
this.entityManager = getManager();
В качестве решения перешли на использование декоратора @InjectEntityManager(). Подробности далее.
Как было
Ошибка была когда был такой код сервиса:
@Injectable() export class SomeService { @InjectRepository(SomeRepository) private someRepository: SomeRepository; private entityManager: EntityManager; constructor() { this.entityManager = getManager(); }
И такой код теста:
describe('SomeService', () => { let service: SomeService; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ providers: [SomeService, SomeRepository], }).compile(); service = module.get<SomeService>(SomeService); }); it('should be defined', () => { expect(service).toBeDefined(); }); });
Возможное решение
Стало работать, когда код сервиса переписали на использование декоратора для медежера сущностей:
@Injectable() export class SomeService { @InjectRepository(SomeRepository) private someRepository: SomeRepository; constructor( @InjectEntityManager() private entityManager: EntityManager, ) {}
И код теста для него:
describe('SomeService', () => { let service: SomeService; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ providers: [ SomeService, { provide:SomeRepository, useValue: {} }, { provide: EntityManager, useValue: {} }, ], }).compile(); service = module.get<SomeService>(SomeService); }); it('should be defined', () => { expect(service).toBeDefined(); }); });
Источник идеи: Идея отсюда: https://stackoverflow.com/a/67536457 там же возможный пример мока, который позволяет пойти другим путем, не использовать декоратор, а мокнуть сам метод получения менеджера:
const deleteMock = jest.fn(); jest.mock('typeorm', () => ({ getManager: () => ({ delete: deleteMock, }) }))
- Log in to post comments
- 2546 reads