2017-02-15 26 views
12

Tôi có một thành phần như thế:Làm thế nào để kiểm tra phương pháp thành phần con với Enzyme?

<Parent> 
    <Child/> 
</Parent> 

<Child/> thành phần có một phương pháp foo. Tôi muốn thử nghiệm phương pháp foo nhưng tôi không biết cách truy cập nó. Tôi cố gắng:

mount(<Parent><Child/></Parent>).props().children.foo 

hoặc

mount(<Parent><Child/></Parent>).children().foo 

nhưng cả hai số đó là undefined. Tôi không thể sử dụng .instance() vì nó không phải là gốc. Tôi không thể gắn kết <Child/> chỉ vì <Parent> thêm thứ gì đó (số context.router phản ứng của bộ định tuyến) trên context và tôi cần chúng khi init <Child/>. Bất kỳ ý tưởng với điều này?

+1

Có vẻ như điều này vẫn không thực hiện được hoặc ít nhất là phức tạp: https://github.com/airbnb/enzyme/issues/361 – Leonardo

+0

Kiểm tra các thành phần phản ứng thấp hơn trong cây trước khi làm việc theo cách của bạn. Cũng xuất một phiên bản chưa được mở của thành phần của bạn để kiểm tra nhằm loại bỏ sự phụ thuộc của thành phần trên bộ định tuyến phản ứng. – therewillbecode

Trả lời

0

Tôi nghĩ rằng vấn đề của bạn khác với cách kiểm tra thành phần con.

Câu hỏi đầu tiên của tôi là: Tại sao bạn kiểm tra xem thành phần con có phương pháp cụ thể trong các thử nghiệm thành phần của phụ huynh không?

IMHO bạn cần có một thử nghiệm cụ thể cho thành phần này và, sau đó, trong thử nghiệm này, bạn kiểm tra xem phương pháp có tồn tại không.

Chỉ để không rời khỏi mà không có câu trả lời, bạn đã thử .find(Child).instance().foo chưa?

1

Tôi sẽ xem xét viết các bài kiểm tra chỉ cho lớp cha mẹ của bạn và sau đó là một tệp kiểm tra riêng để chỉ kiểm tra con của bạn.

Một khi bạn đã gắn kết bạn thành phần sử dụng:

const component = mount(<Child>); 

sau đó bạn có thể truy cập nó là phương pháp sử dụng:

component.instance().methodname 

Sau đó bạn có thể làm công cụ như ghi đè lên nó với jest.fn() và kiểm tra một cách thích hợp.

Các vấn đề liên quan