2015-03-11 23 views
7

Bir jest tabanlı test aşağıdaki kodu vardır:çağıran setState yeniden oluşturulmuyorsa bileşeni

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); 


    }); 

Benim önceki test bileşeninin başlangıç ​​durumunu test eder. Şimdi bir durum değişikliğinden sonra bileşeni kontrol etmek için setState'i aramak istiyorum. Burada kaydediyorum videoClass aynı kalır. Ben reaksiyona giriyorum 0.12. ve son şaka 0.4.0.

Ayarlanan durumdan sonra neler olup bittiğini sınama konusunda herhangi bir fikir var mı?

cevap

1

setState zaman uyumsuz, yani muhtemelen

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

ihtiyaç Ama devlet ui olay veya veri değişikliğinden bir bileşeni içindeki değişim, sebep olmalıdır devlet özel olması gerektiğini düşünüyorum ve değiştirilemez direkt olmamalıdır. Bileşeni dışardan değiştirmek isterseniz, bir seçenek, halka için props kullanıyor.

+0

evet, durum özeldir, ancak bu özel durumda, bileşenin kalan kısmında bir video öğesinde gerçekleşecek bir olay dinliyorum ve bu olay gerçekleştiğinde işleyici çağrılır. En azından setState yerine bu yöntemi doğrudan arayalım. harika, hala jest için yeni. Bunu test edip sonra cevap işareti ver. –

+0

runAllTicks bu konuda yardımcı olmadı. Ayrıca, ilişkisiz, durumu değiştiren yöntemi çağırmıyorum, sadece Object nesnesinin [methodName] yöntemine sahip olmaya devam etmesini sağlayın. –

+0

Merhaba, Jest ve React Test Utils ile State ayarı test etmeye çalışıyorum, bir an varsa buraya bir göz atın? https://stackoverflow.com/questions/44399181/react-jest-how-to-test-changing-state-in-component-and-checking-for-another-co –