如何使用茉莉花编写以下TS功能的单元测试用例

时间:2019-11-19 10:38:21

标签: unit-testing angular7

我正在尝试为以下功能(比较值)编写单元测试。但是我无法模拟数据来覆盖分支。 TS:

  public sortChange(sort: SortDescriptor[]): void {
    this.sort = sort;
    this.SelectedData.sort(this.compareValues(this.sort[0].field, this.sort[0].dir));
}

public compareValues(key: any, order: any) {
  return function(a, b) {
      if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {
          // property doesn't exist on either object
          return 0;
      }

      const varA = (typeof a[key] === 'string') ?
          a[key].toUpperCase() : a[key];
      const varB = (typeof b[key] === 'string') ?
          b[key].toUpperCase() : b[key];

      let comparison = 0;
      if (varA > varB) {
          comparison = 1;
      } else if (varA < varB) {
          comparison = -1;
      }
      return (
          (order === 'desc') ? (comparison * -1) : comparison
      );
  };
}

请帮助我为“比较值”功能中的'if','else'条件编写单元测试用例

1 个答案:

答案 0 :(得分:0)

为了覆盖ifelse,您需要模拟this.SelectedData中的值以及函数中的key

我认为这是一个组件,因此您可以这样模拟this.SelectedData

// add a spy for the property returning a xyz
const spy = spyOnProperty(component, 'SelectedData').and.returnValue([{ xyz: 23 }, { xyz: 44 }]);

// call the sortChange with the options looking for the key test that doesn't exist
component.sortChange([{ field: 'test', dir: 'asc' }])

要测试函数的返回值,我们需要对其进行模拟:

const spyFn = spyOn(component, 'compareValues').and.callThrough();

expect(spyFn.calls.first().returnValue).toEqual(0)

完整示例:

// add a spy for the property returning a xyz
const spy = spyOnProperty(component, 'SelectedData').and.returnValue([{ xyz: 23 }, { xyz: 44 }]);
const spyFn = spyOn(component, 'compareValues').and.callThrough();

// call the sortChange with the options looking for the key test that doesn't exist
component.sortChange([{ field: 'test', dir: 'asc' }])

expect(spyFn.calls.first().returnValue).toEqual(0)

然后要测试其他分支,您只需举一个例子并根据ifelse s中的条件正确应用