javascript - 模拟 GraphQL,MockList 仅生成数组中的两项

标签 javascript mocking graphql graphql-js

我正在尝试在我的 GraphQL 模拟服务器中生成一个包含 10 个项目的列表,如下所示:

import { makeExecutableSchema, addMockFunctionsToSchema, MockList } from 'graphql-tools';
import casual from 'casual';
import typeDefs from './schema.graphql';

export const schema = makeExecutableSchema({ typeDefs });

const mocks = {
  File: () => ({
    path: casual.random_element([
      '/assets/images/cars/1.JPG',
      '/assets/images/cars/2.JPG',
      '/assets/images/cars/3.JPG',
      '/assets/images/cars/4.JPG',
      '/assets/images/cars/5.JPG',
      '/assets/images/cars/6.JPG',
      '/assets/images/cars/7.JPG',
    ]),
  }),
  UsedCar: () =>
    new MockList(10, () => ({
      price: casual.integer(10000, 99999999),
      year: casual.integer(1990, 2017),
    })),
};

// This function call adds the mocks to your schema!
addMockFunctionsToSchema({ schema, mocks });

但我不知道为什么总是得到两辆二手车。 谁能帮忙?

问候, 穆斯塔法

最佳答案

在您的代码中,您正在为您的 UsedCar 类型定义一个模拟解析器。您没有发布 typeDef 或解析器,但我猜您对 UsedCar 的类型定义包括两个字段(价格和年份)……而不是包含这两个字段的整个对象数组。但是,这就是您告诉模拟函数的内容。

如果您有一个获取 UsedCar 类型数组的查询,为了获得 10 个该类型的模拟对象,您将必须同时模拟查询 方式。因此,假设您有一个类似 getUsedCars 的查询,您真正想要的是:

mocks: {
  Query: () => ({
    getUsedCars: () => new MockList(10)
  }),
  UsedCar: () => ({
    price: casual.integer(10000, 99999999),
    year: casual.integer(1990, 2017),
  })
}

编辑:如果您模拟该类型,则架构中任何解析为该类型数组的地方都将默认返回两个模拟对象,这就是为什么您看到两个而不是十个。

关于javascript - 模拟 GraphQL,MockList 仅生成数组中的两项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45000522/

相关文章:

javascript - Emscripten 和 ASMjs

javascript - 使用 GmailApp.SendMail 时显示名称导致无效电子邮件错误

javascript - 输入上的 v-model 返回输入元素而不是值

c# - 在 C# 中使用 Moq 进行模拟

graphql - 在 Graphql 突变中传递多行字符串

parse-platform - 如何使用 GraphQL + parse.com 构建 Web 应用程序?

javascript - 如何在 Graphql 模式中定义日期数据类型?

javascript - 为内联 onmouseover 添加延迟

c# - 我如何使用 Rhino Mocks 检查传递给方法的值

python - 将文件上传到S3的模拟测试用例