单元测试显然没有通过,但仍未通过?

时间:2018-09-11 14:07:10

标签: javascript angular typescript testing karma-runner

我有一个要测试的简单功能,但是没有出现明显的结果...

我的功能如何工作(实际上,它确实在工作,只是无法正确测试)

  1. 我将字符串传递给函数
  2. 如果与我的数组元素匹配
    1. 返回字符串
  3. 如果它与我的数组的元素不匹配
    1. 返回字符串“默认”

运行显示的测试时,收到错误消息:

  

预期“默认”等于“野兔失败”

我的组件

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 :(得分:2)

在这种情况下,请尽量不要使用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';
}

答案 1 :(得分:0)

我相信您在循环中使用const是个问题。您应在此处使用let,因为使用const会防止在循环进行时重新分配值。

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

Typescript docs似乎对此表示同意。