2015-03-11 25 views
7

Tôi có đoạn code sau đây trong một bài kiểm tra dựa jest:gọi setstate trên một thành phần reactjs với utils thử nghiệm không tái render thành phần

it('will show the hero loop if there is one', function() { 

    var React = require('react/addons'); 
    var ShowsDetailHeader = require('../../../../routes/shows/components/ShowsDetailHeader.jsx'); 
    var mockData = require('../../../../mock/episodeDetailData'); 
    mockData.data.show.assets._webHeroVideoUrl = 'https://test.video.com'; 

    var Subject = require('../../../../mock/stubRouterContext')(ShowsDetailHeader, { 
     show: mockData.data.show 
    }); 

    var TestUtils = React.addons.TestUtils; 

    var showsHeader = TestUtils.renderIntoDocument(
     <Subject /> 
    ); 

    showsHeader.setState({ 
     showVideo: true 
    }); 

    var videoClass = TestUtils.findRenderedDOMComponentWithClass(showsHeader, 'flex-video').getDOMNode().getAttribute('class'); 

    expect(videoClass.indexOf('in')).toBe(-1); 

    console.log(videoClass); 


    }); 

thử nghiệm trước đây của tôi kiểm tra tình trạng ban đầu của các thành phần. Bây giờ tôi muốn gọi setState để kiểm tra thành phần sau khi thay đổi trạng thái. VideoClass tôi đang đăng nhập ở đây vẫn giữ nguyên. Tôi phản ứng 0,12. và jest mới nhất 0.4.0.

Bất kỳ ý tưởng nào về cách kiểm tra điều gì xảy ra sau khi đặt trạng thái?

Trả lời

1

setState là async, vì vậy bạn có thể cần

showsHeader.setState({ 
     showVideo: true 
    }); 
jest.runAllTicks(); 
find ... 
expect ... 

Nhưng tôi nghĩ rằng nhà nước nên là riêng tư và không nên trực tiếp thay đổi, nhà nước nên có sự thay đổi bên trong một thành phần, nguyên nhân bởi sự kiện ui hoặc thay đổi dữ liệu. tùy chọn đang sử dụng props cho công chúng, nếu bạn muốn thay đổi thành phần từ bên ngoài.

+0

có, trạng thái là riêng tư, nhưng trong trường hợp cụ thể này trong phần còn lại của thành phần tôi đang nghe một sự kiện xảy ra trên phần tử video và trình xử lý được gọi khi sự kiện này xảy ra. Tôi có thể ít nhất tôi giả sử gọi phương thức đó thay vì setState trực tiếp. tuyệt vời, tôi vẫn còn mới để jest. willl kiểm tra mà ra sau đó đánh dấu trả lời. –

+0

runAllTicks không giúp được gì. Ngoài ra, không liên quan, tôi dường như không thể gọi phương thức đang thay đổi trạng thái, chỉ cần tiếp tục nhận đối tượng Object không có phương thức [methodName]. –

+0

Xin chào, tôi đang cố gắng kiểm tra trạng thái thiết lập với Jest và React Test Utils, hãy nhìn vào đây nếu bạn có một chút thời gian? https://stackoverflow.com/questions/44399181/react-jest-how-to-test-changing-state-in-component-and-checking-for-another-co –

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