Можете ли вы смоделировать метод издевательского свойства с ts-mockito? - PullRequest
0 голосов
/ 24 марта 2020

Я только начал работать с ts-mockito и до сих пор мне очень понравилось. Я сталкиваюсь с проблемой, в которой мне нужно смоделировать метод mocked свойства.

Я попытался смоделировать метод напрямую when(wrapperMock.tps.isBlue()).thenReturn(true);, но получил сообщение об ошибке Cannot read property 'isTrue' of undefined.

Я подумал, что могу быть хитрым и издеваться над сторонней службой, настроить возврат для его метода, а затем вернуть экземпляр службы, когда моя обертка вызовет его.

tpsMock = mock(ThridPartyService);
wrapperMock = mock(Wrapper);

when(tpsMock.isBlue()).thenReturn(true);
when(wrapperMock.tps).thenReturn(instance(tpsMock));

Однако я получаю сообщение об ошибке wrapperMock.tps.isBlue is not a function.

Я занимался этим несколько часов, и ни одна из проблем с статьями / ts-mockito git, с которыми я столкнулся, не помогла. Я не уверен, стоит ли сообщать об этой ошибке или я делаю что-то не так. Надеюсь, кто-то с большим опытом может указать мне правильное направление. Пожалуйста, найдите пример проблемы ниже:

TypeScript v3.7.5
ts-mockito v2.5.0

export class ThridPartyService {
  public isBlue(): boolean {
    return false;
  }
}

export class Wrapper {
  public tps = new ThridPartyService();
}

export class ServiceToTest {
  constructor(public wrapper: Wrapper) {}

  public isTrue(): boolean {
    return this.wrapper.tps.isBlue();
  }
}

describe('', () => {
  let tpsMock: ThridPartyService;
  let wrapperMock: Wrapper;
  let serviceToTest: ServiceToTest;

  beforeEach(() => {
    tpsMock = mock(ThridPartyService);
    wrapperMock = mock(Wrapper);

    when(tpsMock.isBlue()).thenReturn(true);
    when(wrapperMock.tps).thenReturn(instance(tpsMock));

    serviceToTest = new ServiceToTest(instance(wrapperMock));
  });

  it('', () => {
    const returnedValue = serviceToTest.isTrue();
    expect(returnedValue).toBe(true);
    verify(wrapperMock.tps.isBlue()).once();
  });
});
...