Phản ứng Enzyme tìm nút thứ hai (hoặc thứ n)


128

Tôi đang thử nghiệm một thành phần React với kết xuất nông Jasmine Enzyme.

Đơn giản hóa ở đây cho các mục đích của câu hỏi này ...

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

MyOuterComponentcó 2 trường hợp MyInnerComponentvà tôi muốn kiểm tra đạo cụ trên từng cái.

Người đầu tiên tôi biết làm thế nào để kiểm tra. Tôi sử dụng findvới first...

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

Tuy nhiên, tôi đang vật lộn để kiểm tra phiên bản thứ hai của MyInnerComponent.

Tôi đã hy vọng một cái gì đó như thế này sẽ làm việc ...

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

hoặc thậm chí ...

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

Nhưng tất nhiên không phải công việc trên.

Tôi cảm thấy như tôi đang thiếu điều hiển nhiên.

Nhưng khi tôi xem qua các tài liệu tôi không thấy một ví dụ tương tự.

Bất kỳ ai?

Câu trả lời:


225

Những gì bạn muốn là .at(index)phương thức: .at (index) .

Vì vậy, ví dụ của bạn:

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


1
Đối với tôi, nó at()hoạt động với findAll(), có lẽ liên quan đến phiên bản của dự án.
CD Jonatas

11

Nếu bạn muốn kiểm tra một số thứ nhất định trên mỗi thứ, hãy xem xét việc lặp lại thông qua bộ phù hợp:

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

2
 const component = wrapper.find('MyInnerComponent').at(1); 
 //at(1) index of element 0 to ~

 expect(component.prop('title')).to.equal('Good-bye');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.