@commercetools-test-data/core
这个包提供了定义数据模型的核心职能.
安装
$ 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 或静态值.
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。这些嵌入式模型随后被建造在建造器或变压器中.
例如,作者模型可以有一个书列表:
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,
},
});
书籍被定义为另一种模式:
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 型号.
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 选项 :
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 像这样的变压器:
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),可被定义用于特定用例并被再用.
例如:
// 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 软件包。 这保证了在每个函数引用时,返回的数据确实是随机的.
例如:
// 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 表达式.