Почему юнит-тест не пройден? - PullRequest
0 голосов
/ 27 января 2019

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

Часть компонента Alerts использует частьслужебной функции с именем 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"

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

1 Ответ

0 голосов
/ 28 января 2019

Идентификаторы (?) В 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: ""
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...