2015-03-11 15 views
7

Mam następujący kod w teście opartym na żartach:nazywając setstate na reactjs komponentu z utils testowych nie ponownego renderowania komponentu

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


    }); 

Moje poprzednie badania Badania stanu początkowego składnika. Teraz chcę wywołać setState, aby sprawdzić komponent po zmianie stanu. Kategoria VideoClass, w której się teraz loguję, pozostaje taka sama. Odpowiadam 0.12. i najnowsze jest 0.4.0.

Jakieś pomysły dotyczące testowania tego, co dzieje się po ustawieniu stanu?

Odpowiedz

1

setState jest asynchroniczny, więc prawdopodobnie trzeba

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

Ale myślę, że państwo powinno być prywatne i nie powinno być bezpośrednie zmienione, państwo powinno być zmiana wewnątrz komponentu, bo przez ui zdarzenia lub zmiany danych. opcja używa publicznie props, jeśli chcesz zmienić komponent z zewnątrz.

+0

Tak, stan jest prywatny, ale w tym szczególnym przypadku w pozostałej części komponentu odsłuchuję wystąpienie zdarzenia na elemencie wideo, a moduł obsługi zostanie wywołany, gdy wystąpi to zdarzenie. Mogę przynajmniej przypuszczać, że wywołanie tej metody zamiast setState bezpośrednio. Wspaniale, wciąż jestem nowy w żartach. przetestuj to, a następnie odbierz znak. –

+0

runAllTicks nie pomogło sprawie. również, niezwiązane, nie mogę wywoływać metody, która zmienia stan, po prostu dalej otrzymuj obiekt Object nie ma metody [methodName]. –

+0

Witam, próbuję przetestować ustawienie Stan z Jest i React Test Utils, proszę spojrzeć tutaj, jeśli masz chwilę? https://stackoverflow.com/questions/44399181/react-jest-how-to-test-changing- state-in-component-and-checking-for-another-co –

Powiązane problemy