如何将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
相关产品推荐
相关产品推荐

