#unit-testing #constructor #jestjs #nestjs #typeorm
#unit-testing #constructor #jestjs #nestjs #typeorm
Вопрос:
Я унаследовал кодовую базу без тестов и изо всех сил пытаюсь понять насмешки над шутками.
У меня есть пользовательская служба, которая вызывает родительский конструктор в своем конструкторе, который назначает соединение typeorm и EntityManager
//user.service.ts @Injectable() export class UserService extends CrudServicelt;Usergt; { constructor( connection: Connection, private service1: Service1, private service2: Service2, . . . ) { super(User, connection); console.log("USER SERVICE CONSTRUCTOR"); }
Внутри родительского конструктора находятся эти строки, которые лежат в основе проблемы
constructor(private serviceEntity: Newablelt;Tgt;, connection: Connection) { super(connection, serviceEntity); this.manager = connection.manager; this.entity = this.serviceEntity; }
Мой тест включает в себя следующее для настройки насмешек
let service: UserService; let connection; const mockManager = () =gt; ({ getRepository: repoMock }) const mockConnection = () =gt; ({ manager: mockManager() }); beforeEach(async () =gt; { const module: TestingModule = await Test.createTestingModule({ providers: [UserService, Service 1, Service 2,... { provide: Connection, useFactory: mockConnection }, { provide: getRepositoryToken(User), useValue: repoMock } ] }).compile(); service = module.getlt;UserServicegt;(UserService); connection = await module.getlt;Connectiongt;(Connection); jest.mock('typeorm', () =gt; { return { manager: mockManager, getRepository: () =gt; repoMock, PrimaryGeneratedColumn: () =gt; {}, Column: () =gt; {}, Entity: () =gt; {} } }) });
Моя проблема при попытке запустить тест заключается в том, что manager
поле возвращается как нулевое. Назначение происходит в результате super()
вызова конструктора, но по какой-то причине конструктор службы пользователей никогда не вызывается. С помощью отладчика я вижу, что другие службы, от которых я зависим, вызывают свои конструкторы, поэтому я предполагаю, что строка service = module.getlt;UserServicegt;(UserService);
, которая присваивает service
каким-то образом обходит этот вызов конструктора. Это, однако, то, что предлагается в документации. Кто-нибудь знает, как я мог бы создать свой пользовательский сервис с помощью вызова конструктора при использовании jest? Нужно ли мне создавать экземпляры всех зависимостей и просто звонить new UserService()
?