# @commercetools-test-data/core 中文文档

规范地址：https://npmcn.com/package/%40commercetools-test-data/core/

版本：10\.18\.2
npm 元数据更新时间：2025-05-08T11:21:05.939Z
中文译文更新时间：2026-11-10T12:04:33.960Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40commercetools-test-data/core
原文对照：https://npmcn.com/package/%40commercetools-test-data/core/?lang=original
项目主页：https://github.com/commercetools/test-data#readme
源码仓库：https://github.com/commercetools/test-data

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

- 包体积（解压后）：107 kB，22 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：5 个
- 首次发布：2020-09-15T08:25:07.802Z
- 最新版本发布：2025-05-08T11:21:05.752Z
- 近 30 天下载量：10854（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：599（近 12 个月 0 个）

## 中文简介

此软件包提供了定义数据模型的核心职能

## 安装

```sh
npm install @commercetools-test-data/core
```

也可以使用：`pnpm add @commercetools-test-data/core`、`yarn add @commercetools-test-data/core`、`bun add @commercetools-test-data/core`

## README

# `@commercetools-test-data/core`

这个包提供了定义数据模型的核心职能.

## 安装

```bash
$ pnpm add -D @commercetools-test-data/core
```

## 创建新数据模型

模型的定义载于 `models/*` 工作空间,并按不同软件包中的域分组.

要创建新模式,请在 `models` 具有下列结构的工作空间:

```
models/<package_name>
├── LICENSE
├── README.md
├── index.ts
├── package.json
├── src
│   └── <model_name>
│       ├── builder.ts
│       ├── generator.ts
│       ├── index.ts
│       ├── presets
│       │   └── index.ts
│       ├── transformers.ts
│       └── types.ts
├── tsconfig.declarations.json
└── tsconfig.json
```

要定义和构建新模型,需要使用核心软件包 `@commercetools-test-data/core`。 。 。 .

### 构建器

一个构建者是数据模型的结果. 构建器允许与其他模型组成,并将数据转换为不同的形状,例如: `rest` 或者说 `graphql`。 。 。 .

当你想要获得生成的数据时,你会 **构建** 模型(建设者).

建造器基本上由发电机和(可选的)变压器组成.

### 发电机

一个生成器是描述初始模型形状和数据的方法. 大多数字段可以而且应该以一些价值来初始化. 您可以使用 `fake` 或静态值.

```ts
import type { TAuthor } from './types';
import { Generator, fake } from '@commercetools-test-data/core';

const generator = Generator<TAuthor>({
  fields: {
    firstName: fake((f) => f.person.firstName()),
    locale: 'en',
  },
});
```

> 生成器模型的外形是UI中通常使用的东西,不需要转换.

模型可以有嵌入场,如物体或阵列. 大多数时候,这些也被定义为模型. 在这种情况下,生成器可以定义嵌入场值为 `null`。这些嵌入式模型随后被建造在建造器或变压器中.

例如,作者模型可以有一个书列表:

```ts
import type { TAuthor } from './types';
import { Generator, fake } from '@commercetools-test-data/core';

const generator = Generator<TAuthor>({
  fields: {
    firstName: fake((f) => f.person.firstName()),
    locale: 'en',
    books: null,
  },
});
```

书籍被定义为另一种模式:

```ts
import type { TBook } from './types';
import { Generator, fake } from '@commercetools-test-data/core';

const generator = Generator<TBook>({
  name: 'Book',
  fields: {
    title: fake((f) => f.lorem.words()),
  },
});
```

当定义构建者时 `Author`,然后我们就可以初始化 `books` 通过引用 `Book` 型号.

```ts
import type { TAuthor } from './types';
import { Builder } from '@commercetools-test-data/core';
import * as Book from '../book';

const Author = Builder<TAuthor>({
  generator,
  transformers,
}).books([Book.random()]);
```

同时,我们还需要告诉变压器 `books` 字段可以构建。 我们这样做的方式是,在 `buildFields` 选项 :

```ts
import type { TAuthor, TAuthorGraphql } from './types';
import { Transformer } from '@commercetools-test-data/core';

const transformers = {
  graphql: Transformer<TAuthor, TAuthorGraphql>('graphql', {
    buildFields: ['books'],
    // ...
  }),
};
```

### 变形器

变压器用于将生成器(初始模型)中定义的数据转换为另一个形状.

现有3个变压器类型:

-   `default`:这是"身份"变压器. 你会用 `build()` 根据初始形状获取生成数据的方法.
-   `graphql`:这是GraphQL数据形状的变压器。 你会用 `buildGraphql()` 将生成的数据转换成图形QL形状的方法.
-   `rest`:这是REST数据形状的变压器。 你会用 `buildRest()` 将生成的数据转换为 REST 形状的方法.

定义a `graphql` 和(或)a `rest` 变压器是可选的,取决于具体的数据要求是什么.

举例来说 `Author` 我们可以定义一个 `graphql` 像这样的变压器:

```ts
import type { TAuthor, TAuthorGraphql } from './types';
import { Transformer } from '@commercetools-test-data/core';

const transformers = {
  graphql: Transformer<TAuthor, TAuthorGraphql>('graphql', {
    buildFields: ['books'],
    addFields: () => ({
      __typename: 'Author',
    }),
  }),
};
```

然后打电话 `Author.random().buildGraphql<TAuthorGraphql>()` 将使用 `__typename` 字段.

变压器可以配置不同的选项:

-   `buildFields`: 被定义为其他数据模型的字段列表. 这样做是必要的,这样这些嵌入式模型的变压器也会被执行.
-   `removeFields`:应该从模型中删除的字段列表.
-   `addFields`: 一个函数,该函数应返回一个需要添加到模型中的新字段的对象。 然后将对象与初始数据合并. 函数获得初始对象参数 `fields` 对象,以防需要构造出新对象.
-   `replaceFields`: 一个函数,该函数应返回已完全转换的值。 例如,在将数据转换成不同的数据类型时,例如将一个对象转换为一系列对象时,这样做是有用的. 函数获得初始对象参数 `fields` 对象,以防需要构造值.

> 这个 `replaceFields` 备选案文在下列两个方面相互排斥: `addFields` 财务报告和审定财务报表 `removeFields` 选项.

### 预设

预设是预配置模型(buildingers),可被定义用于特定用例并被再用.

例如:

```ts
// presets/author-with-one-book.ts
import type { TAuthorBuilder } from './types';
import * as Book from '../../book';
import Author from './builder';

const preset = (): TAuthorBuilder => Author.random().books([Book.random()]);
export default preset;

// presets/index.ts
export { default as authorWithOneBook } from './author-with-one-book';
```

注意预设导出函数 。 该函数有用,以防预设需要使用一些随机数据,使用 `faker` 软件包。 这保证了在每个函数引用时,返回的数据确实是随机的.

例如:

```ts
// presets/author-with-one-book.ts
import type { TAuthorBuilder } from './types';
import { faker } from '@faker-js/faker';
import * as Book from '../../book';
import Author from './builder';

const preset = (): TAuthorBuilder =>
  Author.random().books([Book.random().title(faker.helpers.words())]);
export default preset;

// presets/index.ts
export { default as authorWithOneBook } from './author-with-one-book';
```

### 类型

这个 `types.ts` 文件包含模型和已转换模型的 TypeScript 表达式.

## 常见问题

### @commercetools-test-data/core 是什么？

此软件包提供了定义数据模型的核心职能

### 如何安装 @commercetools-test-data/core？

在项目目录运行 npm install @commercetools-test-data/core，或使用 pnpm add / yarn add / bun add。

### @commercetools-test-data/core 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @commercetools-test-data/core 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @commercetools-test-data/core 可以商用吗？

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

### @commercetools-test-data/core 的下载量有多少？

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

### @commercetools-test-data/core 还在维护吗？

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

