【问题标题】:How to assert an attribute's rendered value?如何断言属性的渲染值?
【发布时间】:2015-07-05 03:01:00
【问题描述】:

我是 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 绑定是正确的。 labelReactComponent,我看到许多可用的属性和方法。查看和测试要呈现的实际值的最佳方法是什么?

【问题讨论】:

    标签: javascript reactjs jestjs


    【解决方案1】:

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

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

    应该是:

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

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

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

    【讨论】:

    • 谢谢,我想这是我的问题。 “语法问题”在浏览器中渲染得很好,这似乎很奇怪。
    • 嗯,这真的不是语法错误,我这样表述的错误。它只是字符串中的有效代码,Javascript 引擎无法知道它是代码而不是字符串(请记住,JSX 中 { 和 } 中的所有内容都只是 Javascript)。
    • 谢谢。我想这是有道理的。然而,必须有某种方法可以让反应知道,因为它在浏览器中呈现良好:)。如果没有办法知道,那么我希望看到 {this.props.targetName} 呈现。我现在已经检查过了,这确实是导致问题的原因。所以,非常感谢您的帮助。
    猜你喜欢
    • 2019-02-25
    • 2018-09-21
    • 2014-04-08
    • 1970-01-01
    • 2023-03-21
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    相关资源
    最近更新 更多