Конструктор не вызывается при издевательстве над службой в шутку

#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() ?