Imm*_*tar 4 javascript unit-testing ecmascript-6 jestjs
我是reactjs 和jest 的新手。我正在尝试编写一个测试用例,它将通过容器中编写的排序函数。我不知道该怎么写。
TypeError: Cannot read property 'sort' of undefined当我尝试运行测试用例时出现 错误。
实际数组
let testArray=[{trackingId:'1',updated: '1512885243'},
{trackingId:'1',updated: '1512485253'},
{trackingId:'3',updated: '1512884233'},
{trackingId:'2',updated: '1512885243'}];
Run Code Online (Sandbox Code Playgroud)
预期数组
let sortedArray = [{trackingId: '1', updated: '1512885243'},
{trackingId: '1', updated: '1512885253'},
{trackingId: '2', updated: '1512885243'},
{trackingId: '3', updated: '1512884233'}]
// I am thinking something like:
describe('Sorting', () => {
it('Array should be sortedby trackingId', () => {
testArray.sort((a,b) => {
if (a.trackingId !== b.trackingId) {
return a.trackingId - b.trackingId;
}
return new Date(b.updated) - new Date(a.updated);
});
expect(component.contains(result))
.toEqual(expect.arrayContaining(sortedArray))
});
Run Code Online (Sandbox Code Playgroud)
我正在为其编写单元测试的容器类中的排序函数:
customerTrackingInfo = customerTrackingInfo.sort( (a,b) => {
if (a.trackingId !== b.trackingId) {
return a.trackingId - b.trackingId;
}
return new Date(b.updated) - new Date(a.updated);
});
Run Code Online (Sandbox Code Playgroud)
小智 5
我喜欢 @Rafa\xc5\x82 Figura\ 的答案是多么优雅,但它有一个主要缺陷,那就是即使Array.prototype.sort()返回一个排序数组,它也会对原始数组进行排序,改变它。这意味着
\nexpect(array).toStrictEqual(array.sort(sortingFunction))\nRun Code Online (Sandbox Code Playgroud)\n将始终通过,因为array.sort(sortingFunction)将更新array为排序值。不过,修复方法很简单。只需在排序之前复制数组即可:
expect(array).toStrictEqual([...array].sort(sortingFunction))\nRun Code Online (Sandbox Code Playgroud)\n