redux - 使用 MSW 和 Jest 时如何在请求之间的测试中清除 RTK 查询缓存?
问题描述
我正在使用带有 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 时如何实现相同的效果?
解决方案
我可以推荐阅读 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())
推荐阅读
- c++ - 无法显示数组中整数的正确频率
- azure-sql-database - 如何通过 terraform 在 Azure Sql 的无服务器计算层中创建新数据库
- c - 另一个 connect() 无效参数 C
- r - xts 图未显示在新设备/窗口中
- javascript - 为什么我的按钮颜色没有根据命令改变?
- java - 我不知道为什么我的 java 应用程序找不到图像
- javascript - 使用 jquery 和 javascript 动态添加引导轮播
- python - 我收到 tesseract 的权限错误
- django - 如何在脆形式(Django)的InlineCheckboxes中添加行之间的空格并对齐同一列中的元素?
- python - QgsProcessingUtils.mapLayerFromString() 中的第二个参数是什么?