Javascript 为什么jest单元测试被破坏了?

Javascript 为什么jest单元测试被破坏了?,javascript,reactjs,unit-testing,jestjs,enzyme,Javascript,Reactjs,Unit Testing,Jestjs,Enzyme,我的名为Alerts的reactjs组件按日期/名称对json数据进行排序,该组件正在工作,但没有在utilityfunction中中断的单元测试,这就是问题所在 Alertscomponent的一部分使用名为createAlertsWithName的实用程序函数的一部分。它所做的只是将2个数组“合并”为1(因为警报数组不包含名称,我需要它来排序): 运行“npm测试”时,我收到以下错误消息: Alerts › should render sorted data TypeError:

我的名为Alerts的reactjs组件按日期/名称对json数据进行排序,该组件正在工作,但没有在utilityfunction中中断的单元测试,这就是问题所在

Alertscomponent的一部分使用名为createAlertsWithName的实用程序函数的一部分。它所做的只是将2个数组“合并”为1(因为警报数组不包含名称,我需要它来排序):

运行“npm测试”时,我收到以下错误消息:

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)
产出将是:

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"
据我所知,它不会返回未定义的“name”。那么,为什么我会得到未定义错误的“无法读取属性”isPrimaryAppender?

peopleMock.alerts[X]中的id(?)。申请者与
peopleMock.Appenders[X].id中的任何id都不匹配。这会导致
getapplicationbyid
返回
undefined
导致
applicator.isprimaryapplicator
undefined
。如果将
peopleMock.alerts[X].appenders
中的id更新为
peopleMock.appenders[X].id
中的id,测试将运行。但我不确定输出是否是您所期望的。您可能需要更新
createAlertsWithName
函数,以便以合理的方式处理
未定义的

可能是这样的:

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

在没有find语句的情况下运行时,输出是什么?测试数据是什么样子的?它是否与组件在测试之外工作时使用的内容相匹配?输出见上文我添加了一个链接到Github它解决了问题还是仍然相关?在这种情况下,我如何处理未定义的内容?
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"
.find(applicant => applicant && applicant.isPrimaryApplicant) || 
  {
    lastName: ""
  }