我需要使用Jest单元测试来编写此代码:
componentDidUpdate(prevProps) {
if (prevProps.socialMediaId !== this.props.socialMediaId) {
if (typeof this.window.FB !== 'undefined') {
this.window.FB.XFBML.parse();
}
}
}
使用测试用例:
it('should test componentDidUpdate', () => {
props.socialMediaId = '/old_id/';
const component = mount(<MyComponent {...props} />);
this.window.FB = {
XFBML: {
parse: () => {}
}
};
props.socialMediaId = '/new_id/';
component.setProps(props);
expect(this.window.FB.XFBML.parse).toHaveBeenCalled();
});
但是,我得到了错误:
TypeError:无法读取未定义的属性“窗口”
在这种情况下,如何使用“ 此”关键字解决此问题?
答案 0 :(得分:1)
此处this.myservice
.api1(param1)
.pipe(
takeUntil(this.destroyed$),
switchMap((result1) => {
//do some operation and create object x(this.objx)
return this.myservice.api2(param1);
}),
finalize(() => {
//do something after both api calls are completed
},
).subscribe((result2) => {
//do something based on result2 and this.objx
})
是组件属性,很可能用作全局this.window
的抽象。 window
中的this
与测试中的componentDidUpdate
是不同的对象
可以在组件实例上对其进行模拟:
this
根据经验,出于可测试性目的,所有无操作功能都应为Jest存根。