Apollo 缓存忽略字段别名作为键MockedProvider

问题描述

我发现 ApolloProvider 和 MockedProvider 之间的行为存在一些差异,并且在测试中引发错误

假设我有以下查询

query {
  Author {
    id: authorID
    name
  }
}

在 ApolloProvider 中,此查询使用字段别名作为键在 Apollo 缓存中创建条目,缓存中的每个 Author 都有一个 id。因此,Apollo 可以自动合并实体。

使用 MockedProvider 时,情况并非如此。当我模拟以下响应时:

const mockResponse = {
  data: {
    Author: {
      id: 'test!!',name: 'test'
    },},}

我收到以下错误

console.warn
      Cache data may be lost when replacing the Author field of a Query object.
      
      To address this problem (which is not a bug in Apollo Client),define a custom merge function for the Query.Author field,so InMemoryCache can safely merge these objects:
      
        existing: {"authorID":"test!!"...

因此,ApolloProvider 中完全相同的查询使用 id(字段别名)作为键,而在 MockedProvider 中,它只是将 authorID 添加为另一个字段条目。它忽略字段别名并且没有键。

显然现在什么都不能合并。我的第一个猜测是,这是因为 MockedProvider 无权访问架构,因此它不知道 authorID 是 ID 类型?还是我离题了?

对我来说很奇怪的一件事是我的 mockResponse 甚至没有提供 authorID。我的模拟响应是 { id: "test!!" } 但缓存显示{"authorID":"test!!"} 的条目,因此它本身以某种方式“无别名”。

我真的很难理解这里发生了什么。任何见解都会非常有用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)