我具有以下上下文提供程序组件(我正在使用上下文api)
示例代码:
select * from table
where upper(column1||' '||column2||' '||column3) like upper('searchstring%')
and rownum <= 10;
我正在为export class AppProvider extends Component {
contructor (props) {
super(props);
}
fetchOrder () {
// http request
return Promise.all(promises).then(result => console.log(result));
}
updateOrder (id) {
// ...
this.fetchOrder(id).then(result => this.setState(result));
}
render () {
return (
<emailContext.Provider
value={{
state: this.state,
updateOrder: this.updateOrder
}}
>
{this.props.children}
</emailContext.Provider>
);
}
}
编写测试,但我需要模拟updateOrder
正在调用的fetchOrder
http请求。
我想可以像这样模拟它:
updateOrder
,但这给出了:
jest.spyOn(AppProvider, 'fetchOrder').mockResolvedValue('fake value');
如果我放置Cannot spy the fetchOrder property because it is not a function; undefined given instead
而不是updateOrder
,则会得到相同的结果。
为什么会这样?如果这不是解决问题的方法,那么我将如何在测试中拦截该请求?
答案 0 :(得分:1)
fetchOrder
不是AppProvider
的属性,而是其实例的属性(方法属性)。您必须在实例上模拟方法,尽管这将起作用,但最好使用请求拦截器模拟端点本身。这将使您从外部测试实例,而不必完全与实例实现耦合。