You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用queueOperationResolver测试多GraphQL查询组件时仅生效一次求助

问题原因与解决方案

你遇到的问题是对queueOperationResolver的作用理解有误,它并非持续监听新发起的查询,而是仅处理调用该方法时已存在于操作队列中的查询,处理完成后就会失效,后续新增的查询不会触发这个解析器。这属于用法问题,并非预期行为。

正确用法:使用setResolver替代queueOperationResolver

如果需要自动处理所有后续发起的查询(包括组件渲染时的、用户交互触发的),应该使用environment.mock.setResolver,它会设置一个全局的解析函数,每次有新查询发起时都会调用它。

修改后的代码示例:

// 替换queueOperationResolver为setResolver
environment.mock.setResolver((operation) => {
  return solveRelayQuery(operation, testCurrencyCode, queryHandler);
});

const user = userEvent.setup();

await act(async () => {
  render(
    <RelayEnvironmentProvider environment={environment}>
      <MemoryRouter>
        <MyTestComponent />
      </MemoryRouter>
    </RelayEnvironmentProvider>
  );
});

两个API的核心区别

  • queueOperationResolver:一次性消费当前队列中的所有操作,仅执行一次,后续新增的操作不会触发它。适合处理初始渲染前就已入队的查询。
  • setResolver:全局生效的持久解析器,所有新发起的操作都会调用该函数,直到调用environment.mock.clearResolver()清除它。适合需要自动处理多轮查询的测试场景。

如果后续需要清除这个全局解析器,在测试结束后可以调用:

environment.mock.clearResolver();

内容的提问来源于stack exchange,提问作者Arthur Sady Cordeiro Rossetti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 03:35:02