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

如何将apollo-fetch的GraphQL响应存储到变量中?

如何将apollo-fetch的GraphQL响应存储到变量中并用于自动化测试

首先要明确:apollo-fetch的请求是异步操作,返回的是Promise对象,所以不能直接同步赋值到变量,必须用异步语法(async/await或.then()链式调用)来处理。下面结合你的代码逐步说明:


1. 修复并完善你的请求函数

先把你的returnApolloBody函数补全,确保它正确返回包含响应数据的Promise:

const { createApolloFetch } = require('apollo-fetch'); 
const uri = 'http://localhost:3000'; 
const query = `{ Post(id: 1) { id title forename surname } } `; 
const apolloFetch = createApolloFetch({ uri }); 

// 完善后的函数:返回Promise,成功时resolve响应数据,失败时抛出错误
const returnApolloBody = () => {
  return apolloFetch({ query })
    .then(res => res.data)
    .catch(err => {
      throw new Error(`GraphQL请求失败: ${err.message}`);
    });
};

2. 用async/await将响应存储到变量

这是最直观、易读的异步处理方式,需要在async函数内部使用await关键字:

// 定义一个异步函数来获取并存储数据
async function fetchAndStorePostData() {
  // 等待Promise解析,将响应数据存入变量
  const postResponse = await returnApolloBody();
  
  // 现在可以直接访问postResponse中的字段
  const targetPost = postResponse.Post;
  console.log('获取到的标题:', targetPost.title);
  console.log('获取到的名字:', targetPost.forename);
  
  return targetPost; // 可以将数据返回给其他逻辑使用
}

// 调用函数触发请求
fetchAndStorePostData();

3. 结合自动化测试实现断言

以常用的Jest测试框架为例,你可以直接在测试用例中使用async/await获取数据,然后断言字段值:

// 测试用例示例(Jest)
test('验证Post的title、forename和surname字段符合预期', async () => {
  // 获取响应数据
  const postResponse = await returnApolloBody();
  const post = postResponse.Post;

  // 执行断言
  expect(post.title).toBe('你的预期标题'); // 替换为实际预期值
  expect(post.forename).toBe('你的预期名字'); // 替换为实际预期值
  expect(post.surname).toBe('你的预期姓氏'); // 替换为实际预期值
});

备选:用.then()链式调用处理

如果你习惯使用Promise链式调用,也可以这样存储和处理数据:

let storedPostData; // 声明变量用于存储响应

returnApolloBody()
  .then(data => {
    storedPostData = data.Post;
    // 在此处执行断言或其他逻辑
    console.log('姓氏:', storedPostData.surname);
  })
  .catch(err => {
    console.error('请求出错:', err);
  });

内容的提问来源于stack exchange,提问作者DonJuanEco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:26:49