# @cruglobal/graphql-ergonomock 中文文档

规范地址：https://npmcn.com/package/%40cruglobal/graphql-ergonomock/

版本：1\.2\.2
npm 元数据更新时间：2026-08-25T17:24:26.309Z
中文译文更新时间：2026-11-11T02:02:01.884Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40cruglobal/graphql-ergonomock
原文对照：https://npmcn.com/package/%40cruglobal/graphql-ergonomock/?lang=original
源码仓库：https://github.com/joual/graphql-ergonomock

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：53.1 kB，26 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：3 个
- 首次发布：2024-10-30T01:13:23.021Z
- 最新版本发布：2024-11-15T16:33:49.964Z
- 近 30 天下载量：10378（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：4（近 12 个月 0 个）

## 中文简介

自动模拟 GraphQL 操作 .

## 安装

```sh
npm install @cruglobal/graphql-ergonomock
```

也可以使用：`pnpm add @cruglobal/graphql-ergonomock`、`yarn add @cruglobal/graphql-ergonomock`、`bun add @cruglobal/graphql-ergonomock`

## README

[![CircleCI](https://circleci.com/gh/SurveyMonkey/graphql-ergonomock.svg?style=shield)](https://app.circleci.com/pipelines/github/SurveyMonkey/graphql-ergonomock) [![CodeCov](https://codecov.io/gh/SurveyMonkey/graphql-ergonomock/branch/master/graph/badge.svg)](https://codecov.io/gh/SurveyMonkey/graphql-ergonomock) [![Contributors](https://img.shields.io/github/contributors/SurveyMonkey/graphql-ergonomock.svg?style=flat-square)](https://github.com/SurveyMonkey/graphql-ergonomock/graphs/contributors) [![Forks](https://img.shields.io/github/forks/SurveyMonkey/graphql-ergonomock.svg?style=flat-square)](https://github.com/SurveyMonkey/graphql-ergonomock/network/members) [![Stargazers](https://img.shields.io/github/stars/SurveyMonkey/graphql-ergonomock.svg?style=flat-square)](https://github.com/SurveyMonkey/graphql-ergonomock/stargazers) [![Issues](https://img.shields.io/github/issues/SurveyMonkey/graphql-ergonomock.svg?style=flat-square)](https://github.com/SurveyMonkey/graphql-ergonomock/issues) [![Version](https://img.shields.io/npm/v/graphql-ergonomock.svg?style=flat-square)](https://www.npmjs.com/package/graphql-ergonomock) [![MIT License](https://img.shields.io/github/license/SurveyMonkey/graphql-ergonomock.svg?style=flat-square)](https://github.com/SurveyMonkey/graphql-ergonomock/blob/master/LICENSE.txt)

  

[](https://github.com/SurveyMonkey/graphql-ergonomock)

### 图QL 埃戈诺莫克

QQ 对 GraphQL 的开发者友好自传游戏  
[报告错误](https://github.com/SurveyMonkey/graphql-ergonomock/issues) • 妇女 [请求特性](https://github.com/SurveyMonkey/graphql-ergonomock/issues)

## 目录

-   [目录](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-table-of-contents)
-   [关于项目](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-about-the-project)
    -   [基本示例](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-basic-example)
    -   [基本示例(阿波罗)](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-basic-example-apollo)
    -   [内设](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-built-with)
-   [开始](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-getting-started)
    -   [安装](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-installation)
    -   [使用量](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-usage)
        -   [默认大小写](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-default-case)
        -   [ErgonoMocked 与阿波罗- 克利特一起使用](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-ergonomockedprovider-for-use-with-apollo-client)
        -   [作为模拟形状的解析器提供函数](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-providing-functions-as-resolver-in-the-mock-shape)
        -   [模拟错误](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-mocking-errors)
        -   [口交变异](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-mocking-mutations)
-   [API 密码](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-api)
    -   [`ergonomock()`](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-ergonomock)
    -   [`<ErgonoMockedProvider>`](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-ergonomockedprovider)
-   [路线图](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-roadmap)
-   [捐款](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-contributing)
-   [许可证](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-license)
-   [联系人](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-contact)
-   [鸣谢](https://npmcn.com/package/%40cruglobal/graphql-ergonomock/#readme-acknowledgements)

## 关于项目

此库提供了一个开发者方便的方法来模拟您的 GraphQL 请求 。 默认情况下,其船体具有以下特征: 1

-   **自动嘲笑** 以计划定义为基础的类型和字段.
-   **决定随机** 用于支持使用快照等特性.
-   对使用查询的支持 **碎片、联盟和接口**。 。 。 .
-   允许使用 **作为模拟值的函数**,其签名为 GraphQL 解析器,并在运行时解决.

### 基本示例

```js
import { ergonomock } from 'graphql-ergonomock';

// Given a particular GraphQL Schema, ...
const schema = gql`
  type Shape {
    id: ID!
    returnInt: Int
    nestedShape: Shape
    returnBoolean: Boolean
  }

  type Query {
    getShape: Shape
  }
`;

// ...a GraphQL query, ...
const query = gql`
{
  getShape {
    id
    nestedShape {
      returnInt
      nestedShape {
        returnInt
        returnBoolean
      }
    }
  }
}
`;

// ...and a partial, possibly nested shape of data...
const mocks = {
  getShape: {
    nestedShape: {
      returnInt: 5,
      nestedShape: {
        returnInt: 10
      }
    }
  }
};

// ... provides the expected object filled with mock data
const resp = ergonomock(schema, query, { mocks });
expect(resp.data).toMatchObject({
  id: expect.toBeString(),
  nestedShape: {
    returnInt: 5,
    nestedShape: {
      returnInt: 10,
      returnBoolean: expect.toBeBoolean()
    }
  }
}); // ✅ test pass
```

### 基本示例(阿波罗)

```js
import { ErgonoMockedProvider as MockedProvider } from "graphql-ergonomock";

// Given a particular GraphQL Schema, ...
const schema = gql`
  type Shape {
    id: ID!
    returnString: String
    returnBoolean: Boolean
  }

  type Query {
    getShape: Shape
  }
`;

// ...a component making a query ...
const QUERY = gql`
query MyQuery {
  getShape {
    id
    returnString
    returnBoolean
  }
}
`;
const MyComponent = () => {
  const { loading, error, data } = useQuery(QUERY);
  if (loading) return <p>Loading</p>;
  if (error) return <p>Error</p>;

  return (
    <div>
      MyComponent.
      <div>String: {data.getShape.returnString}</div>
      <div>Boolean: {data.getShape.returnBoolean.toString()}</div>
    </div>
  );
};

test("MyComponent can render the query results.", async () => {
  const mocks = {
    MyQuery: {
      getShape: { returnString: "John Doe" }
    }
  };
  const { findByText } = render(
    <MockedProvider schema={schema} mocks={mocks}>
      <MyComponent />
    </MockedProvider>
  );
  expect(await findByText(/String: John Doe/)).toBeVisible();
  expect(await findByText(/Boolean: (true|false)/)).toBeVisible();
}); // ✅ test pass
```

### 内设

-   [字体](https://www.typescriptlang.org/)
-   [图QL](https://graphql.org/)
-   [欢乐](https://jestjs.io/)

## 开始

### 安装

```shell
npm i graphql-ergonomock --save-dev
```

### 使用量

#### 默认大小写

这个 `ergonomock()` 函数可以单独用于在 GraphQL 查询中创建模拟响应.

参见示例

```js
import { ergonomock } from 'graphql-ergonomock';
import schema from '../my-schema.graphql';

test("I can mock a response", () => {
  const resp = ergonomock(schema, 'query MyCrucialOperation { car { id, plateNumber } }', {
    mocks: { car: { plateNumber: '123abc' } }
  });

  expect(resp).toMatchObject({
    data: {
      car: {
        id: expect.toBeString(),
        plateNumber: '123abc'
      }
    }
  });
});
```

#### ErgonoMocked 与阿波罗- 克利特一起使用

如果您的应用程序使用 Apollo- Client, 您也可以使用 `ErgonoMockedProvider` 关闭 `ergonomock()`。生成的值是稳定的,并基于查询名称、形状和变量决定的(这样,如果您如此倾向,您就可以利用测试快照).

参见示例

```jsx
import { ErgonoMockedProvider as MockedProvider } from 'graphql-ergonomock';
import schema from '../my-schema.graphql';

test("I can mock a response", () => {
  const mocks = {
    MyCrucialOperation: {
      car: { plateNumber: '123abc' }
    }
  };
  const { findByText } = render(
    <MockedProvider schema={schema} mocks={mocks}>
      <MyApp />
    </MockedProvider>
  );
  expect(await findByText(/'123abc'/)).toBeVisible();
});
```

如果某个特定组件在React树中被多次调用(但变量不同),则您可以提供一个函数作为操作的值,该函数将随 `operation: GraphQLOperation` 作为第一和唯一的论据.  

参见示例

```jsx
import { ErgonoMockedProvider as MockedProvider } from 'graphql-ergonomock';
import schema from '../my-schema.graphql';

test("I can mock a response with a function", () => {
  let cardinality = 0;
  const mocks = {
    MyCrucialOperation: (operation) => ({ plateNumber: `aaa00${cardinality++}` })
  };
  const { findAllByText } = render(
    <MockedProvider schema={schema} mocks={mocks}>
      <MyApp />
    </MockedProvider>
  );
  expect(await findAllByText(/'aaa00'/)).toHaveLength(3);
});
```

最后,你可以通过 `onCall` 道具 (英语).  

参见示例

```jsx
const spy = jest.fn();
const { findByText } = render(
  <MockedProvider schema={schema} onCall={spy}>
    <MyComponent id="1" />
    <MyComponent id="2" />
    <MyComponent id="3" />
  </MockedProvider>
);

//...
expect(spy.mock.calls).toHaveLength(3);
const { operation, response } = spy.mock.calls[0][0];
expect(operation.variables.id).toEqual("1");
```

#### 作为模拟形状的解析器提供函数

您可以对嵌入的模拟器的任何部分使用函数, 它将被用作此字段的解析器 。 解析器的典型签名是 `(root, args, context, info) => any`。 。 。 .

参见示例

```js
// ...
const mocks = {
  returnShape: {
    returnInt: 4321,
    nestedShape: (root: any, args: any, ctx: any, info: any) => {
      return {
        returnInt: root.someField ? 1234 : 5678
      };
    }
  }
}
//...
```

#### 提供默认模拟解析器函数

如果您有自定义的 scalar 类型或想要为某些类型提供默认的模拟解析器功能,您可以通过 `resolvers` 选项.

参见示例

```js
const schema = gql`
  type Shape = {
    id: ID!
    returnInt: Int
    date: Date
    nestedShape: Shape
  }

  type Query {
    getShape: Shape
  }
`;

const testQuery = gql`
{
  getShape {
    id
    returnInt
    date
    nestedShape {
      date
    }
  }
}
`;

const resp = ergonomock(schema, testQuery, {
  resolvers: {
    Date: () => "2021-04-09"
  }
});
expect(resp.data).toMatchObject({
  id: expect.toBeString(),
  returnInt: expect.toBeNumber(),
  date: '2021-04-09'
  nestedShape {
    date: '2021-04-09'
  }
});
```

#### 模拟错误

您可以在模拟形状中返回或抛出错误 .

参见示例

```js
const testQuery = gql`
  {
    getCar {
      id
    }
  }
`;

const resp = ergonomock(schema, testQuery, {
  mocks: {
    getCar: () => { throw new Error("Server Error"); }
    // or simply getCar: new Error("Server Error")
  }
});

console.log(resp.data.getCar); // null
console.log(resp.errors[0]); // { message: "Server Error", ...}
```

#### 口交变异

你可以嘲笑突变,但如果你在使用 `ergonomock()` 直接需要为操作提供正确的变量,以便操作不失败.

参见示例

```jsx
test("Can partially mock mutations", () => {
  const query = /* GraphQL */ `
    mutation SampleQuery($input: ShapeInput!) {
      createShape(input: $input) {
        id
        returnInt
        returnString
      }
    }
  `;

  const resp: any = ergonomock(schema, query, {
    mocks: {
      createShape: { id: "567" }
    },
    variables: {
      input: { someID: "123", someInt: 123 }
    }
  });

  expect(resp.data.createShape).toMatchObject({
    id: "567",
    returnInt: expect.toBeNumber(),
    returnString: expect.toBeString()
  });
});
```

## API 密码

### `ergonomock()`

这个 `ergonomock(schema, query, options)` 函数需要3个参数

1.  _(必须)_ 图QL **计划** (不是SDL形式).
2.  _(必须)_ 图QL **查询**,或者以SDL(字符串)形式,或者 `DocumentNode`。 。 。 .
3.  _(可选)_ 选项对象 .
    1.  `mocks` 是一个可以部分或全部匹配预期响应形状的对象.
    2.  `seed` 是一个用于种子自动移动值的随机数生成器的字符串.
    3.  `variables` 是查询或突变中使用的可变值对象.

### `<ErgonoMockedProvider>`

这个部件的道具和阿波罗-克利特的非常相像 [模拟提供者](https://www.apollographql.com/docs/react/api/react-testing/#mockedprovider)。唯一的差异是:

-   `mocks` 是一个对象,其中键是操作名称,值是 `mocks` 输入 `ergonomock()` 将接受。 (即可以是空的,也可以是任何与预期反应相匹配的形状. )
-   `onCall` 是一个被执行的查询调用的处理器 。 呼叫签名是 `({operation: GraphQLOperation, response: any}) => void` 其中,答复是将全部答复反馈给单一查询。 目的 `onCall` 提供某种间谍(或 `jest.fn()`(c) 作出判断,说明电话的来历和变量,并掌握从中产生的数值 `ergonomock()`。 。 。 .
-   `resolvers` 是按键所在的对象 `gql` 类型和值为模拟解析器函数。 它旨在允许用户覆盖或提供某些类型的默认模拟功能. (例如自定义 scalar 类型). 呼叫签名是 `(root, args, context, info) => any`。 。 。 .

## 路线图

见 [未决问题](https://github.com/SurveyMonkey/graphql-ergonomock/issues) (c) 列出拟议特征(和已知问题).

## 捐款

贡献使得开放源代码社区成为了如此惊人的学习,激励和创造的地方. 你所做的任何贡献 **非常感谢**。 。 。 .

1.  项目叉
2.  创建您的特性分支( E)`git checkout -b feature/AmazingFeature`(中文(简体) )
3.  提交更改( E)`git commit -m 'Add some AmazingFeature'`(中文(简体) )
4.  推动到该处`git push origin feature/AmazingFeature`(中文(简体) )
5.  打开拉请求

## 许可证

根据麻省理工学院的许可证分发。 见 `LICENSE` 更多信息.

## 联系人

维护者:乔尔·马可特(吉苏布) [@ joual (英语)](https://github.com/joual)(中文(简体) )

项目链接 : [https://github.com/ surveyMonkey/graphql-ergonomock 页面存档备份,存于互联网档案馆](https://github.com/SurveyMonkey/graphql-ergonomock)

## 鸣谢

-   [用于模拟图表QL 数据的新方法](https://www.freecodecamp.org/news/a-new-approach-to-mocking-graphql-data-1ef49de3d491/)
-   [图QL 工具](https://github.com/apollographql/graphql-tools)
-   [图QL-JS](https://github.com/graphql/graphql-js)

## 常见问题

### @cruglobal/graphql-ergonomock 是什么？

自动模拟 GraphQL 操作 \.

### 如何安装 @cruglobal/graphql-ergonomock？

在项目目录运行 npm install @cruglobal/graphql-ergonomock，或使用 pnpm add / yarn add / bun add。

### @cruglobal/graphql-ergonomock 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/cruglobal\_\_graphql-ergonomock 是否存在。

### @cruglobal/graphql-ergonomock 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @cruglobal/graphql-ergonomock 可以商用吗？

@cruglobal/graphql-ergonomock 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @cruglobal/graphql-ergonomock 的下载量有多少？

根据 npm 官方下载统计，@cruglobal/graphql-ergonomock 在 2026/10/11 – 2026/11/09 这 30 天内被下载 10,378 次，日均约 346 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @cruglobal/graphql-ergonomock 还在维护吗？

最新版本 1\.2\.2 发布于 2024/11/16（2 年前）；至今共发布 4 个版本，其中过去 12 个月发布了 0 个；首次发布于 2024/10/30。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

