vendredi 6 décembre 2019

Jest mockImplementation service in node.js (typescript)

I am testing a controller written in typescript using Jest. I try to mock the response of the service, but it does not work out.

EmployeesService.ts

import { IDBConnection } from '../config/IDBConnection';
export class EmployeesService {
  private connection: any;

  constructor(connection: IDBConnection) {
    this.connection = connection;
  }
  async findCount() {
    const results = await this.connection.execute('SELECT count(*) as totalCount FROM EmployeeDB.Employees');
    return results; // [ RowDataPacket { totalCount: 5 } ]
  }
}

Employee.test.ts

jest.mock('../../../services/employeeService');

import { EmployeesController } from '../../../controllers/employeeController';
import { EmployeesService } from '../../../services/employeeService';

describe('Employees', () => {
   test('should get count of employees', async () => {
      const getCount = jest.spyOn(EmployeesService.prototype, "findCount")
         .mockImplementation(() => Promise.resolve([{totalCount: 5}]));
      const mockResp = () => {
         const res: any = {}
         res.status = jest.fn().mockReturnValue(res)
         res.json = jest.fn().mockReturnValue(res)
         return res
      }
      const mockReq = () => {
         const req: any = {}
         req.query = jest.fn().mockReturnValue(req);
         return req
      }
      const req = mockReq();
      const res = mockResp();
      await EmployeesController.prototype.findAllEmployees(req, res);
      expect(getCount).toHaveBeenCalledTimes(1); // Received number of calls: 0
   }
}

Aucun commentaire:

Enregistrer un commentaire