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