Jestjs Apollo Boost MockedProvider在查询中使用片段时返回空对象

Jestjs Apollo Boost MockedProvider在查询中使用片段时返回空对象,jestjs,graphql,react-apollo,react-testing-library,Jestjs,Graphql,React Apollo,React Testing Library,我使用Apollo BoostMockedProvider,Jest and React测试库进行了一个工作测试,当我将返回的字段更改为graphQL片段时,它停止工作。我错过了什么 ticketql.js 导出默认类ticketql{ 静态视图_片段=gql` 片段视图视图上的片段{ 视图ID 版本 名称 描述 有序列{ 柱状体 名称 描述{ 翻译ID 朗 描述 } } } `; 静态获取票证视图=gql` 查询getView($viewId:ID!){ 视图(视图ID:$viewId){ 视

我使用Apollo Boost
MockedProvider
,Jest and React测试库进行了一个工作测试,当我将返回的字段更改为graphQL
片段时,它停止工作。我错过了什么

ticketql.js

导出默认类ticketql{
静态视图_片段=gql`
片段视图视图上的片段{
视图ID
版本
名称
描述
有序列{
柱状体
名称
描述{
翻译ID
朗
描述
}
}
}
`;
静态获取票证视图=gql`
查询getView($viewId:ID!){
视图(视图ID:$viewId){
视图ID
版本
名称
描述
有序列{
柱状体
名称
描述{
翻译ID
朗
描述
}
}
}
}
`;
}
ticketql.test.js

。。。
它('GET\u TICKET\u VIEW',async()=>{
const currentLang=uniqid('lang_');
常量viewMock={
viewId:uniqid('viewId_389;'),
versionId:uniqid('versionId_'),
名称:uniqid('name_'),
description:uniqid('description_'),
orderedColumns:[],
};
_.次(随机(1,5),(列索引)=>{
viewMock.orderedColumns.push({
columnId:uniqid('columnId_33;'),
名称:uniqid('columnId_389;'),
说明:[],
});
_.时报(
_.随机(1,3),
(descIndex)=>viewMock.orderedColumns[columnIndex].descriptions.push({
translationId:uniqid('translationId_979;'),
lang:descIndex==0?currentLang:uniqid('lang_'),
description:uniqid('description_'),
}),
);
});
常量变量={viewId:viewMock.viewId};
常数模拟=[
{
请求:{
查询:ticketql.GET\u TICKET\u视图,
变量,
},
结果:{
数据:{
视图:viewMock,
},
},
},
];
常量TicketViewColumns=()=>{
const{data,loading,error}=useQuery(ticketql.GET\u TICKET\u视图{
变量,
});
返回(
{错误}
    { 加载 “装载…” : ( data.view.orderedColumns.map((列)=>(
  • {column.descriptions.find((d)=>d.lang===currentLang.description}
  • )) ) }
); }; 渲染( , ); wait waitFor(()=>expect(screen.queryalByrole('listitem')) .toHaveLength(viewMock.orderedColumns.length)); ); ...
这个测试按原样运行。但是,当我将GET\u TICKET\u视图更改为此

static GET\u TICKET\u VIEW=gql`
查询getView($viewId:ID!){
视图(视图ID:$viewId){
…视图片段
}
}
${TicketGql.VIEW_FRAGMENT}
`;
…它只是停止工作。
mockedProvider
返回
data==={view:{}
而不是
viewMock
中提供的数据,导致
data.view.orderedColumns.map
错误,因为
数据。view.orderedColumns
未定义的
。我对一个突变使用此片段进行了另一项测试,该测试有效

编辑:

package.json

"dependencies": {
  "@apollo/react-hooks": "^4.0.0",
  "apollo-boost": "^0.4.9",
  "graphql": "^15.0.0",
  ...
}
"devDependencies": {
  "@apollo/client": "^3.1.1",
  "@testing-library/jest-dom": "^5.8.0",
  "@testing-library/react": "^10.0.4",
...
}

使用片段时,只需将
\uuuu typename
添加到模拟对象中。 对于没有片段/联合的简单查询,这不是必需的,但如果您有它,则是必需的


现在我倾向于在我的模拟对象生成器中添加
\uuuuuTypeName
,并在我的TypeScript键入中将其作为可选字段。这样我就可以一直获得正确的
\uuuTypeName
,这样我就可以在graphql和非graphql上下文之间共享我的模拟工厂。我还可以从查询中复制粘贴实际数据来构建那些moc这对GraphQL模式类型产生了一点新的依赖性,但这可能是值得的。谢谢,它为我工作了