开玩笑spyOn模拟api调用不起作用

时间:2020-06-05 05:41:36

标签: javascript reactjs mocking jestjs

我具有以下上下文提供程序组件(我正在使用上下文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,则会得到相同的结果。

为什么会这样?如果这不是解决问题的方法,那么我将如何在测试中拦截该请求?

1 个答案:

答案 0 :(得分:1)

fetchOrder不是AppProvider的属性,而是其实例的属性(方法属性)。您必须在实例上模拟方法,尽管这将起作用,但最好使用请求拦截器模拟端点本身。这将使您从外部测试实例,而不必完全与实例实现耦合。