我正在尝试为以下功能(比较值)编写单元测试。但是我无法模拟数据来覆盖分支。 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'条件编写单元测试用例
答案 0 :(得分:0)
为了覆盖if
和else
,您需要模拟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)
然后要测试其他分支,您只需举一个例子并根据if
和else
s中的条件正确应用