2

我正在使用带有 MSW 的 Redux Toolkit 和 RTK Query 进行模拟,但在尝试返回测试错误时,我似乎得到了相同的数据。我怀疑这是 RTK 查询缓存行为的问题,并尝试使用工具包 createApi 方法的这些选项禁用它,但它们似乎没有解决问题:

keepUnusedDataFor: 0,
refetchOnMountOrArgChange: true,
refetchOnFocus: true,
refetchOnReconnect: true,

在 MSW 文档中,它提供了使用其他库时如何解决此问题的示例:https ://mswjs.io/docs/faq#why-do-i-get-stale-responses-when-using-react-queryswretc

// react-query example
import { QueryCache } from 'react-query'

const queryCache = new QueryCache()

afterEach(() => {
  queryCache.clear()
})

// swr example
import { cache } from 'swr'

beforeEach(() => {
  cache.clear()
})

使用 Redux Toolkit 和 RTK Query 时如何实现相同的效果?

4

2 回答 2

3

我可以推荐阅读 RTK 查询测试:https ://github.com/reduxjs/redux-toolkit/blob/18368afe9bd948dabbfdd9e99b9e334d9a7beedf/src/query/tests/helpers.tsx#L153-L166

这就是我们所做的:

  const refObj = {
    api,
    store: initialStore,
    wrapper: withProvider(initialStore),
  }
  let cleanupListeners: () => void

  beforeEach(() => {
    const store = getStore() as StoreType
    refObj.store = store
    refObj.wrapper = withProvider(store)
    if (!withoutListeners) {
      cleanupListeners = setupListeners(store.dispatch)
    }
  })
  afterEach(() => {
    if (!withoutListeners) {
      cleanupListeners()
    }
    refObj.store.dispatch(api.util.resetApiState())
  })

所以你正在寻找dispatch(api.util.resetApiState())

于 2021-06-16T12:57:28.913 回答
0

基于上述答案,这就是我在我的应用程序中所做的:

beforeEach(() => {
  const { result } = renderHook(() => useAppDispatch(), { wrapper });
  const dispatch = result.current;

  dispatch(myApi.util.resetApiState());
});

wrapper这是 Redux 和其他上下文的提供程序。

于 2021-08-27T17:03:51.203 回答