Apollo Mock Error state -> Error: No more mocked response for the query
Posted
技术标签:
【中文标题】Apollo Mock Error state -> Error: No more mocked response for the query【英文标题】:Apollo Mock Error state -> Error: No more mocked responses for the query 【发布时间】:2020-12-23 02:25:15 【问题描述】:我想做什么?
使用@apollo/client/testing
中的MockProvider
模拟查询的错误状态。
我期望得到什么?
组件使用useLazyQuery
从后端查询一些东西,并返回一个error
,这将触发组件呈现错误消息。
组件按预期工作。
我实际上得到了什么?
错误:未捕获 [错误:查询没有更多的模拟响应......并且测试没有通过。
我尝试了什么?
-
最终状态按预期工作。我尝试删除模拟数据中的错误状态,一切正常。
我试图等待更长时间,但没有帮助
我尝试在组件中记录错误,我可以看到错误。看起来 MockProvider 缺少一些东西,甚至在渲染组件之前就出错了
我尝试删除
data
部分,或将其重新添加到模拟中。请参阅下面的代码
您的代码在哪里?
尝试#1
const mock =
request: query: GET_REFERRER_FROM_CODE, variables: input: "edx" ,
result:
errors: [new GraphQLError("Error!")],
data:
userGetReferrerFromCode:
id: "abc",
firstName: "Leo",
lastName: "Qiu",
,
,
,
;
尝试#2
const mock =
request: query: GET_REFERRER_FROM_CODE, variables: input: "edx" ,
result:
errors: [new GraphQLError("Error!")],
,
;
基本代码
<MockedProvider addTypename=false mocks=mocks>
...
</MockedProvider>
【问题讨论】:
你找到解决办法了吗? 【参考方案1】:根据经验,我发现错误字段不需要嵌套在结果中即可触发错误。
例如
const mocks = [
request: query: GET_REFERRER_FROM_CODE, variables: input: "edx" ,
error:
message: "Something went wrong",
,
];
那么当使用时
const loading, data, error = useQuery(GET_REFERRER_FROM_CODE,
variables: input: "edx" ,
);
error
将包含来自模拟的对象。
【讨论】:
以上是关于Apollo Mock Error state -> Error: No more mocked response for the query的主要内容,如果未能解决你的问题,请参考以下文章
何时使用 apollo-link-state 以及何时使用 apollo-cache-inmemory
apollo-link-state 以及如何访问本地状态/缓存?
刷新页面时,apollo-state-link 不在缓存中保存状态