Угловое 6 модульное тестирование зависимых обещаний - PullRequest
0 голосов
/ 19 ноября 2018

Я новичок в Angular и в настоящее время пишу юнит-тесты для своего приложения. Я действительно озадачен и, кажется, не могу продолжать писать модульные тесты для моей текущей задачи. Мой компонент использует следующий метод:

async updateLevelModes(level: Level) {
    const updateModes: Promise<any>[] = [];
    for(let mode of level.Modes) {
      const updateMode = this.modeService.updateMode(mode);
      updateModes.push(updateMode);
    }
    await Promise.all(updateModes);
    const update = await this.LevelService.updateLevel(level);
    level.Id = update._id;
  }

Используются две службы: modeService и levelService.

Мой LevelService.ts выглядит так

async updateLevel(level: Level): Promise<void> {
    const formdata = new FormData();
    formdata.append('Name', level.Name);
    formdata.append('Description', level.Description);
    formdata.append('ImageFile', level.ImageFile);

    const resultLevel = await this.http.put<IStep>(this.postStepsUrl+'/'+step.Id, formdata)
      .pipe(catchError(this.errorHandler))
      .toPromise<IStep>();
    this.HandleStepResult(Level, resultLevel);
  }

Как мне написать тест для такого сложного метода? Пожалуйста, помогите

1 Ответ

0 голосов
/ 19 ноября 2018

Не совсем «сложный» метод:

  • для каждого режима, обновите его
  • обновите уровень

Из предоставленного кода вынужно два макета и одно ожидание:

it('should update the level ID', () => {
  const newID = 5;
  spyOn(component['modeService'], 'updateMode').and.returnValue(Promise.resolve(true));
  spyOn(component['modeService'], 'updateLevel').and.returnValue(Promise.resolve({ id: newID }));

  component.updateLevelModes(component.level);

  expect(component.level.id).toEqual(newID);
});

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

Это означает, что если вы издеваетесь над своим сервисом, вам не нужно знать, что он делает, вам нужно только знать, что он возвращает новый уровень с идентификатором.

Этот тест для бизнеса - все, что вам нужно для предотвращения побочных эффектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...