启用缓存时模拟服务人员和 Apollo 客户端的最佳实践

Posted

技术标签:

【中文标题】启用缓存时模拟服务人员和 Apollo 客户端的最佳实践【英文标题】:Best practices with mock service workers and Apollo Client when caching enabled 【发布时间】:2021-05-03 15:43:13 【问题描述】:

我有一个使用 Apollo 客户端的应用程序,当我添加 MSW 时,我发现缓存正在返回带有空响应的陈旧请求。 MSW 团队表示,最佳实践是在运行测试时清除每个请求的缓存,但我也想在模拟模式下运行我的应用程序以进行手动测试。

在运行启用了模拟的应用时执行以下操作似乎可行,但必须将这样的模拟逻辑放入应用中似乎违反直觉。还有人遇到这种情况吗?

const [
   fetchUser,
    loading, error, data, refetch, networkStatus ,
 ] = useLazyQuery(QUERY_GET_USER, 
   fetchPolicy: API_MOCKING ? 'network-only' : 'cache-and-network',
   nextFetchPolicy: API_MOCKING ? 'network-only' : 'cache-first',
 );

【问题讨论】:

运气好吗?遇到同样的事情。 不走运,使用上面的代码在模拟模式下运行应用时关闭缓存 【参考方案1】:

我无法评论你原来的问题,所以我会做一个回答,让你知道你至少可以覆盖默认的 fetchPolicy,即使在 apollo-boost 中也是如此。这可能会使您的测试的 fetchPolicy 设置为“仅限网络”不那么痛苦。

参考:https://github.com/apollographql/apollo-client/issues/3900#issuecomment-420830472

【讨论】:

以上是关于启用缓存时模拟服务人员和 Apollo 客户端的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

Apollo 客户端:缓存更新后组件不呈现(反应变量)

Apollo 客户端持久缓存不起作用

我需要将我的 Apollo 客户端缓存设置为默认值

反应应用程序上的 Apollo 客户端缓存问题

Apollo原理

如何在本地网络上部署带有 apollo 客户端和 apollo-server 后端的 React 应用程序