Мой компонент 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»?
Как выглядят тестовые данные? Соответствует ли он тому, что используется, когда компонент работает вне теста?
выход см. выше
Я добавил ссылку на гитхаб
это решило проблему github.com/dimitri-a/error_in_test/commit/… или она все еще актуальна?
Еще не решено @YevheniiHerasymchuk



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Идентификаторы (?) в 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 в этой ситуации?
Каков результат, когда вы запускаете его без оператора find?