GraphQL UpdateTransaction mutation触发MockedProvider无模拟响应报错
排查思路与解决方案
核心问题(最可能触发报错的原因)
你当前的mock返回结构不符合GraphQL的查询结构要求:你发起的UpdateTransaction mutation要求返回updateTransaction { id }的嵌套结构,但你的mock返回的data直接写了id: null,少了updateTransaction的嵌套层级,导致MockedProvider判定该mock不匹配对应请求,最终抛出无可用mock响应的报错。
修正后的mock配置如下:
{ request: { query: UpdateTransaction, variables: { id: testTransaction.id, user_id: '61946c571c2a20c8f553d76b', description: 'baking supplies', merchant_id: 'walmart', debit: true, credit: false, amount: 17.99 } }, result: jest.fn(() => { console.log('hello') return { data: { // 补充嵌套的updateTransaction层级 updateTransaction: { id: null } } } }) }
如果用静态返回,对应修改为:result: { data: { updateTransaction: { id: null } } }
其他需要排查的常见场景
- 确认
testTransaction.id的值与实际请求携带的id完全一致:报错里实际请求的id为619463389d0b3bb69eba7379,如果testTransaction.id的取值和该值不相等(比如拼写错误、测试用例里testTransaction初始化错误),MockedProvider会因为变量不匹配无法命中mock。 - 确认你引用的
UpdateTransactionmutation定义和组件内发起请求用的是同一个导出:如果两个文件分别定义了同名的UpdateTransaction mutation,即使内容完全一致,GraphQL也会判定为不同的请求,无法匹配mock。 - 确认该mutation没有被重复调用:MockedProvider的单个mock默认只能响应一次请求,如果你的组件逻辑里该mutation被触发了两次,你需要在mocks数组里添加两个相同的mock配置,或者用自定义的mock匹配逻辑允许多次匹配。
- 排查变量类型是否完全匹配:比如
amount字段如果实际传的是字符串类型的"17.99",即使值和mock里的数字17.99一致,也会因为类型不同判定为不匹配。
内容的提问来源于stack exchange,提问作者lyssaloo
相关产品推荐
相关产品推荐

