【发布时间】:2019-09-23 00:03:37
【问题描述】:
我正在开发一个用于在 React 中平滑加载图像的包装器组件。我将酶与 mocha、chai 和 sinon 一起使用来对我的组件进行单元测试。在这里的测试中,我试图测试:
图片加载后组件状态更新
组件上的
onLoad实例方法被调用
我发现无论是酶还是onLoad spy 的调用计数都没有反映状态的更新。这是对应的测试代码:
export default class Image extends Component {
constructor(props) {
super(props);
if (props.src != null && typeof props.src === 'string') {
this.state = {
status: LOADING,
};
} else {
this.state = {
status: PENDING,
};
}
this.onLoad = this.onLoad.bind(this);
}
onLoad() {
this.setState({
status: LOADED,
});
}
render() {
//lots of code above the part we care about
const defaultImageStyle = style({
opacity: 0,
transisition: 'opacity 150ms ease',
});
const loadedImageStyle = style({
opacity: 1,
});
let imageStyle = defaultImageStyle;
if (this.state.status === LOADED) {
imageStyle = merge(defaultImageStyle, loadedImageStyle);
} else {
imageStyle = defaultImageStyle;
}
let image;
if (alt != null) {
image = (<img
className={imageStyle}
src={src}
width={width}
height={height}
alt={alt}
onLoad={this.onLoad}
/>);
} else {
image = (<img
className={imageStyle}
src={src}
width={width}
height={height}
role="presentation"
onLoad={this.onLoad}
/>);
}
let statusIndicator = null;
if (this.state.status === LOADING) {
statusIndicator = (<div className={loadingStyle}></div>);
}
return (<div className={wrapperStyle}>
{statusIndicator}
{image}
</div>);
}}
查看完整代码以获得更好的上下文:
【问题讨论】:
标签: javascript reactjs sinon enzyme chai-enzyme