Enzyme 为浅渲染的 React 组件上的 prop 返回 null

IT技术 javascript reactjs enzyme
2021-05-11 11:07:26

问题

我刚刚开始使用酶和react测试。我试图让酶在一个简单的react组件上与 karma 和 webpack 一起工作。我的问题是prop()在包装器上返回 null,我不知道为什么。

问候语

import React from 'react';

/*
 * A trivial component we added while trying to get the react testing  working
 * */

export default class Greeter extends React.Component {
constructor(props) {
    super(props);
    this.state = { name: props.initialName };

    this.greeterText = this.greeterText.bind(this);
}

greeterText() {
    return (<p>Hello, {this.state.name}!</p>);
}

render() {
    return (<div className="greeter">
        {this.greeterText()}
    </div>);
  }
}

Greeter.defaultProps = { initialName: "World" };

Greeter.propTypes = {
  initialName: React.PropTypes.string
};

欢迎者.spec.js

import Greeter from '../../components/test/Greeter';
import React from 'react';
import { shallow } from 'enzyme';


describe("Simple testing with shallow rendering", () => {
  beforeEach(function() {
    let initialName = "joe";
    this.wrapper = shallow(<Greeter initialName={initialName} />);
  });

  it("renders default Greeter", function() {
    console.log(this.wrapper.find(".greeter").text());
    console.log(this.wrapper.debug());
    console.log(this.wrapper.state('name'));
    expect(this.wrapper.state('name')).to.equal("joe");
    expect(this.wrapper.prop('initialName')).to.equal("joe");
   });
 });

结果

浅层渲染的简单测试 × 渲染默认 Greeter Chrome 50.0.2661 (Windows 10 0.0.0) AssertionError: 预期未定义等于 Assertion.assertEqual >>(F:/web/forms/node_modules/chai/chai.js :776:12) 在 Assertion.ctx.(anonymous function) [as equal] (F:web/forms/node_modules/chai/chai.js:4192:25) 在 Context。(F:web/forms/spec/components/greeter.spec.js:9:2932 <- webpack:///spec/components/greeter.spec.js:18:52)

  • react 0.14.8
  • 业力
  • 网络包
  • 酶 2.2.0
2个回答

如果你想测试传入的 props 像这样使用mount

  it('allows us to set props', () => {
    const wrapper = mount(<Foo bar="baz" />);
    expect(wrapper.props().bar).to.equal("baz");
    wrapper.setProps({ bar: "foo" });
    expect(wrapper.props().bar).to.equal("foo");
  });

我相信您正在寻找的是wrapper.instance().props.nameOfProp访问浅层包装器的根节点props。

从概念上讲,假设您有一个组件,它在挂载时有条件地运行 Function props。这当然值得检查,对吧?