【发布时间】:2020-03-06 13:26:43
【问题描述】:
有人对如何对这个组件进行单元测试有任何建议吗?我正在努力弄清楚如何正确地模拟 getFoo,然后在运行我的测试之前等待它的承诺得到解决。我目前正在使用 Jest 来尝试这样做。
import { getFoo } from "../../../api/fooApi";
class Accordion extends React.Component {
constructor(props) {
super(props);
this.state = {
isActive: false,
isLoaded: false
};
}
componentDidMount() {
getFoo(this.props.id).then(
result => {
this.setState({
isLoaded: true,
foo: result
});
},
error => {
this.setState({
isLoaded: true,
error
});
}
);
}
render() {
const { isActive, isLoaded, foo } = this.state;
if (!isLoaded) return <Spinner />;
return (
<Accordion styled>
<Accordion.Title
active={isActive}
onClick={() => {
this.setState({ isActive: !isActive });
}}
>
<Icon name="dropdown" />
{foo}
</Accordion.Title>
<Accordion.Content active={isActive}>
{foo}
</Accordion.Content>
</Accordion>
);
}
}
这是实际的方法。
export async function getFoo(id) {
const res = await fetch(`/api/foo/${id}`);
if (res.status !== 200) throw Error;
return res.json();
}
【问题讨论】: