Как внедрить Entity Manager в качестве зависимости в интегрированных тестах - PullRequest
0 голосов
/ 29 июня 2019

У меня есть встроенная система, которая проверяет мой контроллер. В моем сервисе я ввожу EntityManager в качестве зависимости, чтобы я мог выполнить пользовательский запрос. Однако, когда я передаю EntityManager в качестве поставщика в моем тесте, я получаю следующую ошибку TypeError: Cannot read property 'query' of undefined.

test.controller.spec.ts

describe('Test Controller', () => {
  let module: TestingModule;
  let controller: TestController;
  let dbConnection: Connection;

  beforeAll(async () => {
    module = await Test.createTestingModule({
      controllers: [TestController],
      providers: [TestService, EntityManager],
    }).compile();
    controller = module.get<TestController>(TestController);

    let connectionOptions: any = await getConnectionOptions();
    connectionOptions = { ...connectionOptions, name: 'default', database: 'test' };
    dbConnection = await createConnection(connectionOptions);
  });

  afterAll(async () => {
    await dbConnection.close();
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });

  it('should get an array', async () => {
    const expectResult: any = [];
    const result: any = await controller.findAll();
    expect(result).toEqual(expectResult);
  });
});

test.controller.ts

@Controller()
export class AlarmCountController {
  constructor(private readonly testService: TestService) {}

  @Get()
    async findAll(): Promise<any> {
      return this.testService.getAll();
    }
}

test.service.ts

@Injectable()
export class TestService {
  constructor(private manager: EntityManager) {}

  async getAll(): Promise<any> {
    const baseQuery: string `
      SELECT *
      FROM Test
    `;

    return await this.manager.query(baseQuery);
  }
}
...