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
- 3101 reads