Jest 中排序的单元测试用例

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()返回一个排序数组,它也会对原始数组进行排序,改变它。这意味着

\n
expect(array).toStrictEqual(array.sort(sortingFunction))\n
Run Code Online (Sandbox Code Playgroud)\n

将始终通过,因为array.sort(sortingFunction)将更新array为排序值。不过,修复方法很简单。只需在排序之前复制数组即可:

\n
expect(array).toStrictEqual([...array].sort(sortingFunction))\n
Run Code Online (Sandbox Code Playgroud)\n