如何使用 jest.spyOn 测试 RTKQuery 端点

How do you test an RTKQuery endpoint using jest.spyOn

我正在尝试测试 RTKQuery 是否已使用 jest 调用端点。

我最终还希望能够模拟 return 数据的内容,但首先我只想检查挂钩是否已被调用。

下面的示例,我试图在 myApi 上监视自动生成的 useGetMyListQuery 挂钩。

运行时抛出错误,有人可以帮忙吗?

it('Should render', async () => {
    jest.spyOn(myApi, 'useGetMyListQuery')

    render(
      <Provider store={store}>
        <MyComponent />
      </Provider>
    )

    expect(myApi.useGetMyListQuery).toBeCalled()
})

我无法回答你关于如何通过开玩笑来做到这一点的问题,但我希望我能在这里给你一些见解 - 从编写大部分 RTKQ 的角度以及我如何想象它被测试以稳定的方式:

我不会开玩笑。我会嘲笑 API.

这是因为您的模拟将从 RTKQ 挂钩中假设某些 return 值 - 如果您的假设是错误的,您可能会有一个不错的绿色 运行 测试,但在实际上你的应用程序仍然会失败。

这方面的一个例子是使用 skip 而不是检查 isUninitialized - 因为如果你不使用 skip 就不会出现这种情况,你可能只是假设您只会在组件中看到 isLoadingisSuccessisError 个案例。在许多情况下,这是一个完全有效的假设,但并非总是如此。模拟 RTKQ 会隐藏绿色测试背后的错误。

相反,我建议使用 mock service worker to just mock your api endpoints and let RTKQ do it's work. That is how we are testing RTKQ ourselved in our own tests - you are welcome to take a look there: RTKQ tests.