对于浅层渲染的反应组件,酶在prop上返回null [英] Enzyme returns null for prop on shallow rendered react component
问题描述
我刚刚开始使用酶并进行反应测试。我试图让酶与karma和webpack一起处理一个微不足道的反应组件。我的问题是包装器上的 prop()
返回null,我不知道为什么。
I am just getting started with enzyme and react testing. I am trying to get enzyme working with karma and webpack on a trivial react component. My issue is that prop()
on the wrapper returns null and I am not sure why.
Greeter.js
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
};
greeter.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:预期未定义为等于'joe' Assertion.assertEqual上的
>>(F:/web/forms/node_modules/chai/chai.js:776:12)Assertion.ctx上的
。(匿名函数)[等于](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)
Simple testing with shallow rendering × renders default Greeter Chrome 50.0.2661 (Windows 10 0.0.0) AssertionError: expected undefined to equal 'joe' at Assertion.assertEqual >>(F:/web/forms/node_modules/chai/chai.js:776:12) at Assertion.ctx.(anonymous function) [as equal] (F:web/forms/node_modules/chai/chai.js:4192:25) at Context. (F:web/forms/spec/components/greeter.spec.js:9:2932 <- webpack:///spec/components/greeter.spec.js:18:52)
筹码
- 反应0.14.8
- 业力
- webpack
- 酶2.2.0
- react 0.14.8
- karma
- webpack
- enzyme 2.2.0
推荐答案
如果你想测试传递的道具,那么使用 mount
就像这样: / p>
If you want to test props passed in like that use mount
like so:
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");
});
这篇关于对于浅层渲染的反应组件,酶在prop上返回null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!