我正在使用Enzyme,Mocha和Expect测试React组件。测试用例如下所示:
import React from 'react';
import expect from 'expect';
import { shallow } from 'enzyme';
import Add from '../src/client/components/add.jsx';
describe('Add', () => {
let add;
let onAdd;
before(() => {
onAdd = expect.createSpy();
add = shallow(<Add onAdd={onAdd} />);
});
it('Add requires onAdd prop', () => {
console.log(add.props());
expect(add.props().onAdd).toExist();
});
});
我正在使用expect创建一个间谍并将其附加到Add组件的onAdd prop。我的测试检查组件上是否存在prop。由于某种原因,onAdd未定义且测试失败。有什么帮助吗?
答案 0 :(得分:4)
问题是add
没有包装<Add>
组件,它包装它返回的内容。因此,如果您的组件如下所示:
class Add extends React.Component {
render() {
return (
<div>
{this.props.foo}
</div>
);
}
}
此声明add.props().onAdd
将尝试从onAdd
而不是<div>
访问<Add>
道具,显然它会失败。
这个断言:
expect(add.props().onAdd).toExist();
会成功,在组件中会看起来像:
class Add extends React.Component {
render() {
return (
<div onAdd={this.props.onAdd}>
{this.props.foo}
</div>
);
}
}
酶 文档中显示的Example有点令人困惑。