我想做什么?
使用 @apollo/client/testing
中的 MockProvider
来模拟查询的错误状态。
我期望得到什么?
组件使用useLazyQuery
从后端查询某些内容,并返回一个错误
,这将触发组件呈现错误消息。
该组件正在按预期工作。
我实际上得到了什么?
Error: Uncaught [Error: No more mocked responses for the query ... And the test does not pass.
我尝试了什么?
- 最终状态按预期运行。我尝试删除模拟数据中的错误状态,一切正常。
- 我试图等待更长的时间,但没有帮助
- 我尝试在组件中记录错误,我可以看到该错误。看起来 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>
最佳答案
根据经验,我发现错误字段不需要嵌套在结果中即可触发错误。
例如
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
将包含模拟中的对象。
关于graphql - Apollo 模拟错误状态 -> 错误 : No more mocked responses for the query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63730570/