我正在使用管道对带有两个日期时间列的 json 数组按升序或降序排序(由 boolean 触发isDescending
,但是单元测试似乎并不关心每个对象在数组中的顺序。就像在测试中一样所有 4 种情况都返回 true,即使返回的数组应该具有与 相比的相反顺序的项目dummyData[]
。我做错了什么
sortpipe.ts
export class SortByPipe implements PipeTransform {
transform(data: iRepositories[], args?: ISortByPipe): iRepositories[] {
if ( !args.column)
{
return data;
}
return data.sort((a, b) => {
if (args.isDescendingOrder)
{
return a[args.column] > b[args.column] ? -1 : 1;
}
else
{
return a[args.column] > b[args.column] ? 1 : -1;
}
});
}
}
sortpipe.spec.ts
describe('SortByPipe', () => {
let pipe: SortByPipe;
beforeEach(() => {
pipe = new SortByPipe();
});
const dummyData = [
{ id: 1, created_at: '2014-01-24T13:40:11Z', updated_At: '2015-01-24T13:40:11Z' },
{ id: 2, created_at: '2015-01-24T13:40:11Z', updated_At: '2016-01-24T13:40:11Z' },
{ id: 3, created_at: '2016-01-24T13:40:11Z', updated_At: '2017-01-24T13:40:11Z' },
];
it('create an instance', () => {
expect(pipe).toBeTruthy();
});
// this is correct
it('should return in the same order as the original data (sort by created_at date)', () => {
const args: ISortByPipe = {column: 'created_at', isDescendingOrder: false};
expect(pipe.transform(dummyData, args)).toEqual(dummyData);
});
// this is correct
it('should return in the same order as the original data (sort by last commit date)', () => {
const args: ISortByPipe = {column: 'updated_At', isDescendingOrder: false};
expect(pipe.transform(dummyData, args)).toEqual(dummyData);
});
// this should be false but its returning true
it('should return in descending order (sort by created_at date)', () => {
const args: ISortByPipe = {column: 'created_at', isDescendingOrder: true};
expect(pipe.transform(dummyData, args)).toEqual(dummyData);
});
// this should be false but its returning true
it('should return in descending order (sort by last commit date)', () => {
const args: ISortByPipe = {column: 'updated_At', isDescendingOrder: true};
expect(pipe.transform(dummyData, args)).toEqual(dummyData);
});
})
像这样尝试
let sortarray = [...data];
sortarray = sortarray.sort((a, b) => {
if (args.isDescendingOrder)
{
return a[args.column] > b[args.column] ? -1 : 1;
}
else
{
return a[args.column] > b[args.column] ? 1 : -1;
}
});
return sortarray;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句