用酶测试反应成分并期望失败
Testing react component with enzyme and expect fails
我正在使用 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。由于某种原因,onAdd 未定义且测试失败。有帮助吗?
问题是 add
没有包装 <Add>
组件,它包装了 returns 的内容。所以,如果你的组件看起来像:
class Add extends React.Component {
render() {
return (
<div>
{this.props.foo}
</div>
);
}
}
这条语句 add.props().onAdd
将尝试从 <div>
而不是 <Add>
访问 onAdd
属性,显然它会失败。
这个断言:
expect(add.props().onAdd).toExist();
将成功,在组件中将如下所示:
class Add extends React.Component {
render() {
return (
<div onAdd={this.props.onAdd}>
{this.props.foo}
</div>
);
}
}
Example 显示在 enzyme 文档中,有点令人困惑。
我正在使用 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。由于某种原因,onAdd 未定义且测试失败。有帮助吗?
问题是 add
没有包装 <Add>
组件,它包装了 returns 的内容。所以,如果你的组件看起来像:
class Add extends React.Component {
render() {
return (
<div>
{this.props.foo}
</div>
);
}
}
这条语句 add.props().onAdd
将尝试从 <div>
而不是 <Add>
访问 onAdd
属性,显然它会失败。
这个断言:
expect(add.props().onAdd).toExist();
将成功,在组件中将如下所示:
class Add extends React.Component {
render() {
return (
<div onAdd={this.props.onAdd}>
{this.props.foo}
</div>
);
}
}
Example 显示在 enzyme 文档中,有点令人困惑。