我在基于游戏的测试中有以下代码:
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);
});
我之前的测试测试了组件的初始状态。我现在想要在状态改变后调用setState来检查组件。我在这里登录的videoClass保持不变。我在反应0.12。最新的开玩笑0.4.0。
关于如何测试设置状态后发生的事情的任何想法?
答案 0 :(得分:1)
setState
是异步的,所以你可能需要
showsHeader.setState({
showVideo: true
});
jest.runAllTicks();
find ...
expect ...
但是我认为状态应该是私有的,不应该直接改变,状态应该在组件内部进行更改,因为ui事件或数据更改。
如果您想从外部更改组件,则选项正在使用props
公开。