Я бы хотел иметь возможность протестировать мой сервис Nest на реальной базе данных. Я понимаю, что большинство модульных тестов должны использовать фиктивный объект, но иногда имеет смысл проводить тестирование и против самой базы данных.
Я искал в «Гнездо» вопросы SO и GH и начинаю переходить к завершению всех ответов. : -)
Я пытаюсь работать с https://github.com/nestjs/nest/issues/363#issuecomment-360105413. Ниже приведен мой модульный тест, в котором для передачи хранилища моему классу обслуживания используется пользовательский поставщик.
describe("DepartmentService", () => {
const token = getRepositoryToken(Department);
let service: DepartmentService;
let repo: Repository<Department>;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
DepartmentService,
{
provide: token,
useClass: Repository
}
]
}).compile();
service = module.get<DepartmentService>(DepartmentService);
repo = module.get(token);
});
Все компилируется правильно, TypeScript кажется счастливым. Однако, когда я пытаюсь выполнить create
или save
на моем Repository
экземпляре, базовый Repository
кажется неопределенным. Вот обратная трассировка стека:
TypeError: Cannot read property 'create' of undefined
at Repository.Object.<anonymous>.Repository.create (repository/Repository.ts:99:29)
at DepartmentService.<anonymous> (relational/department/department.service.ts:46:53)
at relational/department/department.service.ts:19:71
at Object.<anonymous>.__awaiter (relational/department/department.service.ts:15:12)
at DepartmentService.addDepartment (relational/department/department.service.ts:56:16)
at Object.<anonymous> (relational/department/test/department.service.spec.ts:46:35)
at relational/department/test/department.service.spec.ts:7:71
Похоже, что экземпляр EntityManager
с классом TypeORM Repository
не инициализируется; это ссылка undefined
, на которую жалуется эта обратная трассировка.
Как заставить Repository
и EntityManager
правильно инициализироваться?
спасибо,
Том.