React Enzyme ค้นหาโหนดที่สอง (หรือที่ n)


130

ฉันกำลังทดสอบองค์ประกอบการตอบสนองด้วยการเรนเดอร์ตื้นของเอนไซม์จัสมิน

ทำให้ง่ายขึ้นที่นี่เพื่อวัตถุประสงค์ของคำถามนี้ ...

function MyOuterComponent() {
  return (
    <div>
      ...
      <MyInnerComponent title="Hello" />
      ...
      <MyInnerComponent title="Good-bye" />
      ...
    </div>
  )
}

MyOuterComponentมี 2 ​​อินสแตนซ์MyInnerComponentและฉันต้องการทดสอบอุปกรณ์ประกอบฉากในแต่ละอัน

คนแรกที่ฉันรู้วิธีทดสอบ ฉันใช้findกับfirst...

expect(component.find('MyInnerComponent').first()).toHaveProp('title', 'Hello');

อย่างไรก็ตามฉันกำลังดิ้นรนเพื่อทดสอบตัวอย่างที่สองของMyInnerComponentไฟล์.

ฉันหวังว่าสิ่งนี้จะได้ผล ...

expect(component.find('MyInnerComponent').second()).toHaveProp('title', 'Good-bye');

หรือแม้แต่สิ่งนี้ ...

expect(component.find('MyInnerComponent')[1]).toHaveProp('title', 'Good-bye');

แต่แน่นอนว่าทั้งสองอย่างข้างต้นไม่ได้ผล

ฉันรู้สึกว่าตัวเองหายไปอย่างชัดเจน

แต่เมื่อฉันดูเอกสารฉันไม่เห็นตัวอย่างที่คล้ายคลึงกัน

ใคร?

คำตอบ:


226

สิ่งที่คุณต้องการเป็น.at(index)วิธีการ: ในตอน (ดัชนี)

ตัวอย่างของคุณ:

expect(component.find('MyInnerComponent').at(1)).toHaveProp('title', 'Good-bye');


1
สำหรับฉันมันat()ใช้งานได้กับfindAll()อาจเกี่ยวข้องกับเวอร์ชันของโครงการ
Jonatas CD

11

หากคุณต้องการทดสอบบางสิ่งในแต่ละสิ่งให้พิจารณาการทำซ้ำผ่านชุดที่ตรงกัน:

component.find('MyInnerComponent').forEach( (node) => {
    expect(node.prop('title')).toEqual('Good-bye')
})

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.