Mocking GraphQL,MockList只在数组中生成两个项目

Sha*_*kam 3 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 });
Run Code Online (Sandbox Code Playgroud)

但我总是得到两辆二手车,我不知道为什么.有人可以帮忙吗?

此致,穆斯塔法

Dan*_*den 11

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

如果您有一个获取UsedCar类型数组的查询,为了获得该类型的10个模拟对象,您将必须模拟查询类型.所以,假设你有一个类似的查询getUsedCars,你真正想要的是:

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

编辑:如果您模拟该类型,则模式中解析为该类型数组的任何位置默认情况下将返回两个模拟对象,这就是您看到两个而不是十个的原因.