Как заглушить / смоделировать параметр метода / конструктора в jest для модульного тестирования в nodejs? - PullRequest
0 голосов
/ 23 апреля 2019

Я новичок в узле js и jsest. У меня есть класс для юнит-теста, используя jest :

import { Observable, from } from 'rxjs';
import { inject, injectable } from 'inversify';
import "reflect-metadata";
import ILogger from './ilogger';
import { ServiceInterface, DaoInterface } from '../interfaces';

@injectable()
class ServiceImpl implements ServiceInterface {
  public loggerService: ILogger;
  private dao: DaoInterface;
  public constructor(@inject("LOGGER") loggerService: ILogger, @inject("DAO") dao: DaoInterface) {
    this.loggerService = loggerService;
    this.dao = dao;
  }
  public get = (id: any): Observable<any> => {
    return from(this.dao.executeQuery(id));
  };
}
export default ServiceImpl;

Я искал много учебников в Интернете, но не смог найти способ насмешки / заглушки дао (, как сделано в java / Junit ), чтобы вернуть заглушки.
Я пытаюсь ниже, но в замешательстве:

import { ServiceImpl } from '../services';
import { Dao } from '../dao';
import { of } from 'rxjs/internal/observable/of';
import { catchError } from 'rxjs/operators';
import "reflect-metadata";

describe('ServiceImpl Tests', () => {
  let serviceImpl: ServiceImpl;
  beforeAll(() => {
    jest.setTimeout(30000);
    serviceImpl = new ServiceImpl(null, **<WHAT TO PASS HERE AS MOCKED DAO OBJECT>**);
  });

  it('temp test case', done => {
    expect(serviceImpl.get(10)).toMatch('');
    console.log("done===================");
    done();
  });
});

Что передать вместо и как вернуть фиктивные данные при вызове dao.executeQuery (id)?

Пожалуйста, помогите. Спасибо.

...