JEST How to mock getManager().query from NestJS

Viewed 15

Hi I'm trying to test my service but got stuck

import { HttpException, Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { getManager, Repository } from 'typeorm';
import { PointsEntity } from './entities/point_store.entity';

@Injectable()
export class PointStoreService {
  constructor(
    @InjectRepository(PointsEntity)
    private readonly pointsRepository: Repository<PointsEntity>,
  ) {}

  async searchPoints(startDate: Date, endDate: Date, userId: string) {
    try {
      return await getManager().query(`
        SELECT * FROM points WHERE expire_at
        BETWEEN '${startDate.toISOString()}' AND '${endDate.toISOString()}'
        AND "userId"='${userId}'
      `);
    } catch (err) {
      throw new HttpException(err.message, err.state ? err.state : 500);
    }
  }
}

This is my Service code. As you know there is only one method.

import { Test, TestingModule } from '@nestjs/testing';
import { getRepositoryToken } from '@nestjs/typeorm';
import * as typeorm from 'typeorm';
import { PointsEntity } from './entities/point_store.entity';
import { PointStoreService } from './point_store.service';

const mockPointsRepository = {
  save: jest.fn(),
};

describe('PointStoreService', () => {
  let service: PointStoreService;
  let repository: typeorm.Repository<PointsEntity>;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [
        PointStoreService,
        {
          provide: getRepositoryToken(PointsEntity),
          useValue: mockPointsRepository,
        },
      ],
    }).compile();
    jest.resetModules(); // Most important - it clears the cache
    service = module.get<PointStoreService>(PointStoreService);
    repository = module.get(getRepositoryToken(PointsEntity));
  });

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

  describe('searchPoints', () => {
    it('should searchPoints', async () => {
      // can not mock getManager!!!
      jest.spyOn(getManager, 'query');
    });
  });
});

Now I code this test case. 'should be defined' works fine. But after I try to test 'should searchPoints', I have no idea to mock it.

Is there a way to mock getManager().query()?

gitHub repository

0 Answers
Related