reactjs - 使用测试工具在reactjs组件上调用setState不重新渲染组件

标签 reactjs jestjs

我在基于 Jest 的测试中有以下代码:

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 保持不变。我正在使用react 0.12。和最新的 Jest 0.4.0。

关于如何测试设置状态后会发生什么有什么想法吗?

最佳答案

setState 是异步的,所以你可能需要

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

但我认为状态应该是私有(private)的,不应该直接更改,状态应该在组件内部更改,由 ui 事件或数据更改引起。 如果您想从外部更改组件,一个选项是使用 props 进行公开。

关于reactjs - 使用测试工具在reactjs组件上调用setState不重新渲染组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28994283/

相关文章:

typescript - 模拟类方法的 jest.fn() 自动类型

javascript - 使用流类型构建 react 项目以实现最佳类型可重用性

reactjs - React TestUtils,如何模拟文档mouseMove?

javascript - 有什么方法可以将状态变量导出/传递到 ReactJS 中的外部 CSS 文件

node.js - 如何在使用 aws-sdk-mock 时进行参数验证

javascript - React jest - 验证状态已更改

javascript - 何时从在 this.props 与 this.state 中存储嵌套组件变量切换

javascript - 根据所选类别进行过滤 react

javascript - 如何使用 Enzyme 浅包装器对作为 prop 传递给子组件的 React 函数进行单元测试

reactjs - 如何动态模拟组件?