Почему модульный тест шутки не работает?

Мой компонент reactjs под названием Alerts сортирует json-данные по дате/имени, компонент работает, но не модульный тест, который он ломает в служебной функции, в этом проблема.

Часть Alertscomponent использует часть служебной функции createAlertsWithName. Все, что он делает, это «объединяет» 2 массива в 1 (поскольку массив предупреждений не содержит имени, и мне нужно это для сортировки):

export const createAlertsWithName = (alerts,applicants) =>{
    return alerts.map(a =>({
      ...a,
      name:(a.applicants
        .map(id =>getApplicantByid(id,applicants))
        .find(applicant => applicant.isPrimaryApplicant) ||{lastName:''}).lastName
    }))
  }

Когда я запускаю «npm test», я получаю следующее сообщение об ошибке:

Alerts › should render sorted data

    TypeError: Cannot read property 'isPrimaryApplicant' of undefined

       6 |       name:(a.applicants
       7 |         .map(id =>getApplicantByid(id,applicants))
    >  8 |         .find(applicant => applicant.isPrimaryApplicant) ||{lastName:''}).lastName
         |                                      ^
       9 |     }))
      10 |   }
      11 | 

      at isPrimaryApplicant (src/utility.js:8:38)
          at Array.find (<anonymous>)
      at find (src/utility.js:8:10)
          at Array.map (<anonymous>)
      at map (src/utility.js:4:19)
      at createAlertsWithName (src/utility.js:17:12)
      at Alerts.render (src/Alerts.js:12:11)

Это кажется странным, потому что я проверил свойство name без оператора find следующим образом:

 name:(a.applicants
    .map(id =>getApplicantByid(id,applicants))

Результат будет:

applicants: (2) ["000001262", "000001263"]
assignedDateTime: "2018-10-25T09:25:00Z"
createdDateTime: "2019-10-24T09:25:00Z"
dueDateTime: "2019-10-25T09:25:00Z"
id: "19d0da63-dfd0-4c00-a13a-cc822fc81297"
name: (2) [{…}, {…}]
subject: "What a nice day"
submissionId: "SUB200620150004197"
__proto__: Object
1:
applicants: ["000001201"]
assignedDateTime: "2018-10-25T09:25:00Z"
createdDateTime: "2018-10-24T09:25:00Z"
dueDateTime: "2018-10-25T09:25:00Z"
id: "19d0da63-dfd0-4c00-a13a-cc822fc81201"
name: [{…}]
subject: "Hello"
submissionId: "SUB200620150004201"

И, насколько я вижу, он не возвращает неопределенное «имя». Итак, почему я получаю сообщение об ошибке «Невозможно прочитать свойство isPrimaryApplicant of undefined»?

Каков результат, когда вы запускаете его без оператора find?

3ocene 27.01.2019 05:26

Как выглядят тестовые данные? Соответствует ли он тому, что используется, когда компонент работает вне теста?

Karl Galvez 27.01.2019 05:38

выход см. выше

bier hier 27.01.2019 05:49

Я добавил ссылку на гитхаб

bier hier 27.01.2019 06:09

это решило проблему github.com/dimitri-a/error_in_test/commit/… или она все еще актуальна?

Yevhenii Herasymchuk 27.01.2019 16:35

Еще не решено @YevheniiHerasymchuk

bier hier 27.01.2019 21:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
112
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Идентификаторы (?) в peopleMock.alerts[X].applicants не совпадают ни с одним из идентификаторов в peopleMock.applicants[X].id. Это приводит к тому, что getApplicantByid возвращает undefined, в результате чего applicant.isPrimaryApplicant становится undefined. Если вы обновите идентификаторы в peopleMock.alerts[X].applicants до идентификаторов в peopleMock.applicants[X].id, тест запустится. Я не уверен, что результат будет таким, как вы ожидаете. Возможно, вы захотите обновить функцию createAlertsWithName, чтобы она корректно обрабатывала undefined.

Может быть, что-то вроде:

.find(applicant => applicant && applicant.isPrimaryApplicant) || 
  {
    lastName: ""
  }

Как я могу обрабатывать undefined в этой ситуации?

bier hier 27.01.2019 22:23

Другие вопросы по теме