用 jest spyOn 来模拟 api 调用不起作用

密码门

我有以下上下文提供程序组件(我正在使用上下文 api)

示例代码:

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,但我需要模拟fetchOrderhttp请求被调用updateOrder

我想我可以像这样嘲笑它:jest.spyOn(AppProvider, 'fetchOrder').mockResolvedValue('fake value');但这给出了:Cannot spy the fetchOrder property because it is not a function; undefined given instead

如果我把updateOrder而不是fetchOrder.

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

伊哈布

fetchOrder不是上的属性AppProvider,但在其它的情况下的特性的方法(属性)。您必须模拟实例上的方法,虽然这是可行的,但最好使用请求拦截器模拟端点本身。这将使您从外部世界测试实例,而不必完全与其实现耦合。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章