启用缓存时模拟 Service Worker 和 Apollo Client 的最佳实践

问题描述

我有一个使用 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',});

解决方法

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

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