1

我是React的新手,将Jest视为一种潜在的单元测试解决方案。但是,我发现很难找出如何简单地在ReactComponent. 我不确定这是否是因为通常的做法是不渲染并查看实际值,或者我只是还没有找到一个好的例子。

所以,这就是我正在使用的:

标签组件:

var Label = React.createClass({
    render: function() {
        if (this.props.targetName) {
            return (
                <label htmlFor="{this.props.targetName}">{this.props.content}</label>
            );
        }
        return (
                <label>{this.props.content}</label>
        );
    }
});

module.exports = Label;

开玩笑测试:

describe('Label sub component', function() {
    var Label = require('../../../views/label');
    it('has the correct target element name', function() {
        var labelDocument = TestUtils.renderIntoDocument(
                <Label targetName="foobar" content="Upload Files:"/>
        );
        var label = TestUtils.findRenderedDOMComponentWithTag(labelDocument, 'label');
        expect(label.getDOMNode().getAttribute('for')).toEqual('foobar');  // actually returns {this.props.targetName}
    });
});

所以,正如你所看到的,我不确定这里的期望断言。我希望该值foobar呈现在正确的元素中。然后,我可以确保props绑定是正确的。label是一个ReactComponent,我看到许多可用的属性和方法。查看和测试将呈现的实际值的最佳方法是什么?

4

1 回答 1

2

问题是您有语法错误。这一行:

<label htmlFor="{this.props.targetName}">{this.props.content}</label>

应该:

<label htmlFor={this.props.targetName}>{this.props.content}</label>

请注意,属性值周围没有引号。

另请注意,您的label变量是一个 React 组件实例,它具有props您可以使用的属性,而不是在 DOM 节点上查找它。

于 2015-04-27T05:44:37.803 回答