Модульный тест не проходит, хотя, очевидно, должен? - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть простая функция, которую я хочу проверить, но очевидного результата не происходит ...

Как работает моя функция (на практике она работает, она просто не тестируется должным образом)

  1. Я передаю строку в свою функцию
  2. Если совпадает с элементом моего массива
    1. Возвращает строку
  3. Если он не соответствует элементу моего массива
    1. возвращает строку 'default'

Когда я запускаю показанный тест, я получаю сообщение об ошибке:

Ожидаемый «по умолчанию» равный «заяц-провал»

Мой компонент

const state = [
   {name: 'failure'}
];

isStatus(current): string {
    for (const status of this.state) {
      if (status.name === current) {
        return current;
      }
    }
    return 'default';
  }

Мой тест

beforeEach(async(() => {

    TestBed.configureTestingModule({
      declarations: [EventComponent, ConfirmationComponent],
      imports: [ReactiveFormsModule, FormsModule],
      providers: []
    });

    fixture = TestBed.createComponent(EventComponent);
    component = fixture.componentInstance;
    component.ngOnInit();
  }));

it('should return current status if it is part of exceptional statuses', () => {
    const returned = component.isState('failure');
    expect(returned).toEqual('failure');
  });

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

В этом случае старайтесь не использовать цикл for-of.Вы можете переписать компонент, используя метод some () для массивов, и создать чистую функцию.

Итак, вместо:

isStatusExceptional(currentStatus): string {
for (const status of this.exceptionalRaceStatuses) {
  if (status.name === currentStatus) {
    return currentStatus;
  }
}
return 'default';

}

пишите:

isStatusExceptional(current, erc = this.exceptionalRaceStatuses): string {
  return erc.some(item => item.name === current) ? current : 'default';
}
0 голосов
/ 11 сентября 2018

Я считаю, что вы используете const в цикле. Вы должны использовать let здесь, потому что использование const предотвращает переназначение значения в ходе цикла.

isStatusExceptional(currentStatus): string {
    for (let status of this.exceptionalRaceStatuses) {
      if (status.name === currentStatus) {
        return currentStatus;
      }
    }
    return 'default';
  }

Машинописные документы , похоже, согласны с этим.

...