Тестовый блок для сортировки в 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'}];

Ожидаемый массив

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))

});

Функция сортировки в моем классе контейнера, для которого я пишу модульный тест:

customerTrackingInfo = customerTrackingInfo.sort( (a,b) => {
        if (a.trackingId !== b.trackingId) {
          return a.trackingId - b.trackingId;
        }
        return new Date(b.updated) - new Date(a.updated);
});

2 ответа

Решение

Я нашел хороший способ проверить, правильно ли отсортирован массив.

Просто используйте:

        expect(array).toStrictEqual(array.sort(sortingFunction*))

Если функция сортировки не задана, порядок сортировки по умолчанию - по возрастанию.

Подробнее о сортировке можно прочитать здесь

Мне нравится, насколько элегантен ответ @Rafał Figura, но у него есть один серьезный недостаток: хотя Array.prototype.sort() возвращает отсортированный массив, он сортирует исходный массив на месте , видоизменяя его. Это означает, что

      expect(array).toStrictEqual(array.sort(sortingFunction))

всегда будет проходить с тех пор array.sort(sortingFunction)будет обновлять arrayбыть отсортированным значением. Однако исправление простое. Просто скопируйте массив перед его сортировкой:

      expect(array).toStrictEqual([...array].sort(sortingFunction))
Другие вопросы по тегам