【问题标题】:Test React element height with Jest用 Jest 测试 React 元素高度
【发布时间】:2015-04-07 21:42:43
【问题描述】:

我有一个非常简单的 React.js 组件,它用“阅读更多”/“阅读更少”功能来装饰一长段标记。

我在 Jest 工作时进行了一些测试, 但是,我无法断言 DOM 元素的高度正在增加到原始内容的大小。

在 Jest 测试环境中,我对 getDOMNode().scrollHeight 的调用似乎没有返回任何内容。

这里是包含代码和未通过测试的存储库的链接:https://github.com/mguterl/react-jest-dom-question

以下是说明相同问题的代码和测试的简化版本:

简化代码

var ReadMore = React.createClass({
  getInitialState: function() {
    return {
      style: {
        height: '0px'
      }
    }
  },

  render: function() {
    return (
      <div>
        <div ref='content' className='read-more__content' style={this.state.style} dangerouslySetInnerHTML={{__html: this.props.content}} />
        <a onClick={this.expand} href='#'>Expand</a>
      </div>
    );
  },

  expand: function() {
    // This call to scrollHeight doesn't return anything when testing.
    var height = this.refs.content.getDOMNode().scrollHeight;

    this.setState({
      style: {
        height: height
      }
    });
  }
});

测试

jest.dontMock('../ReadMore');

global.React = require('react/addons');
var TestUtils = React.addons.TestUtils;
var ReadMore = require('../ReadMore');

describe('ReadMore', function() {
  var readMore;
  var content;
  var link;

  beforeEach(function() {
    readMore = TestUtils.renderIntoDocument(
      <ReadMore collapsedHeight='0px' content='<p>Hello World</p>' />
    );

    content = TestUtils.findRenderedDOMComponentWithClass(
      readMore, 'read-more__content');

    link = TestUtils.findRenderedDOMComponentWithTag(
      readMore, 'a');
  });

  it('starts off collapsed', function() {
    expect(content.getDOMNode().getAttribute('style')).toEqual('height:0px;');
  });

  it('expands the height to fit the content', function() {
    TestUtils.Simulate.click(link);
    expect(content.getDOMNode().getAttribute('style')).toEqual('height:100px;');
  });
});

【问题讨论】:

    标签: reactjs reactjs-testutils


    【解决方案1】:

    Jest“使用假 DOM 实现(通过 jsdom)运行您的测试,以便您的测试可以在命令行上运行”(http://facebook.github.io/jest/)。

    我不希望设置元素高度之类的东西,因为它不是针对渲染引擎运行来计算任何 div 的高度的。

    我建议在 div 上设置一个标记样式类,在任一状态或两种状态下(“read-more”/“read-less”)。然后你的测试可以断言一个类的存在或不存在。

    另外 - 如果您根本没有在“阅读更多”模式下设置样式属性,则应渲染封闭的 div 以完全显示内部 div(除非您不只是试图显示整个内部 div) .那么在“少读”模式下测试 style 属性是否具有 this.props.collapsedHeight 值,而不是在“多读”模式下设置是否足够?

    【讨论】:

    • 我们创建了一个单独的 Measurable 组件,该组件将为依赖模块提供高度,这使我们能够将 Measurable 模块存根以进行更好的测试。
    • 所以您真的不需要出于任何原因测试 css 吗?您不想确保您的元素具有正确的填充、边距等...?我觉得这是jest的一大局限,jasmine确实支持!
    猜你喜欢
    • 2022-01-11
    • 2017-09-04
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2020-02-06
    • 2020-08-12
    • 1970-01-01
    相关资源
    最近更新 更多