esit/fakertoolbox

此软件是一款开源CMS Contao的扩展,允许直接在DCAdie中存储测试数据定义。

安装: 9

依赖关系: 0

建议者: 0

安全: 0

星星: 2

观察者: 1

分支: 1

开放问题: 0

类型:contao-bundle

1.3.0 2021-12-07 10:46 UTC

This package is auto-updated.

Last update: 2024-09-08 13:59:26 UTC


README

描述

此软件是一款开源CMS Contao的扩展,允许直接在DCAdie中存储测试数据定义,然后可以通过简单的调用Faker来创建单个字段或整个表格行的测试数据。

许可证

LGPLv3许可下分发。有关更多信息,请参阅LICENSE文件。

作者

e@sy Solutions IT: Patrick Froch info@easySolutionsIT.de

支持

info@easySolutionsIT.de

要求

  • php: >=7.2
  • contao/core-bundle: >=4.4

安装

安装可以通过Contao Manager轻松完成,搜索esit/fakertoolbox并安装。

配置

在DCA中有四个条目可以插入到eval数组中

fakerMethod

fakerMethod指定Faker用于创建此字段测试数据的Method。提供Faker提供的所有方法。可以在以下位置找到概述:https://github.com/fzaninotto/Faker

示例

$GLOBALS['TL_DCA']['tl_member']['fields']['firstname']['eval']['fakerMethod'] = 'firstName';

当请求字段tl_member.firstname的测试值时,将创建一个名字。

fakerParameter

使用fakerParameter可以定义创建方法的参数,例如,可以限制数字范围。

示例

$GLOBALS['TL_DCA']['tl_member']['fields']['id']['eval']['fakerMethod']      = 'numberBetween';
$GLOBALS['TL_DCA']['tl_member']['fields']['id']['eval']['fakerParameter']   = [1, 9999];

当需要为字段tl_member.id创建测试值时,将返回一个介于1和9999之间的数字。

fakerOptional

使用fakerOptional可以指定值生成的概率以及作为默认值返回的内容。

示例

$GLOBALS['TL_DCA']['tl_member']['fields']['id']['eval']['fakerMethod']      = 'firstName';
$GLOBALS['TL_DCA']['tl_member']['fields']['id']['eval']['fakerOptional']    = [0.6, ''];

以60%的概率返回一个名字,否则返回一个空字符串。

fakerUnique

如果将fakerUnique设置为true,则总是返回不同的值。如果由于例如可用元素不足等原因无法实现,则会生成错误(见Modifiers)。

示例

$GLOBALS['TL_DCA']['tl_member']['fields']['id']['eval']['fakerMethod']      = 'numberBetween';
$GLOBALS['TL_DCA']['tl_member']['fields']['id']['eval']['fakerParameter']   = [1, 3];
$GLOBALS['TL_DCA']['tl_member']['fields']['id']['eval']['fakerUnique']      = true;

在此配置中,当无法返回新的1到3之间的数字时(即第4次调用时),将生成错误。

fakerSerial

使用fakerSerial设置可以创建序列化数据。由于Contao以这种方式表示多重关系,因此在测试中经常遇到。设置必须包含两个数字的数组。第一个指定要生成数据的最低数量,第二个指定最大数量。如果需要生成空数据集,则返回空字符串而不是a:0:{},因为这也是Contao的做法。

示例

$GLOBALS['TL_DCA']['tl_member']['fields']['groups']['eval']['fakerMethod']      = 'numberBetween';
$GLOBALS['TL_DCA']['tl_member']['fields']['groups']['eval']['fakerParameter']   = [1, 10];
$GLOBALS['TL_DCA']['tl_member']['fields']['groups']['eval']['fakerSerial']      = [1,5]; // Anzahl der serialisierten Datensätze: [min., max.]

在此示例中,将为每个条目创建1到5个数字,并将它们作为序列化数组返回。这些可以是成员组的ID。

重要的是,不应输入0到5,否则会生成相对较多的空数据集。虽然这会工作,但可以通过fakerOptional进行更好的配置。

使用

创建工厂

在DCA中设置完设置后,可以简单地生成测试值。首先获取工厂。

$factory = \Contao\System::getContainer()->get('esit_fakertoolbox.services.factories.fakerfactory');

还可以通过依赖注入简单地获取服务。

ContaoFaker

现在可以通过传递所需表来获取实际的 ContaoFaker。这是一个封装了收集所需信息和实际创建逻辑的包装器,旨在简化使用。

$faker = $factory->getFaker('tl_member');

测试值

要访问测试值,有三种方法。可以简单地通过属性访问来获取单个值。重要的是,只能访问已定义 fakerMethod 的字段。如果访问没有定义 fakerMethod 的字段,将生成错误。

示例

$id = $faker->id;

可以获取整个表行。重要的是,只为那些定义了 fakerMethod 的字段生成值,其他字段将被忽略。

示例

$row = $faker->getRow();

最后,可以获取任意数量的表行,例如填充测试数据库。只需传递所需的数量即可。这里也只为定义了 fakerMethod 的字段创建测试数据。

示例

$rows = $faker->getRows(5);

自定义提供者

可以简单地通过包装器注册自定义提供者。这样就可以生成特殊数据(参见 Faker 内部:理解提供者)。

$factory    = \Contao\System::getContainer()->get('esit_fakertoolbox.services.factories.fakerfactory');
$faker      = $factory->getFaker('tl_member');
$faker->addProvider(\Esit\Fakertoolbox\Classes\Provider\Internet::class);

\Esit\Fakertoolbox\Classes\Provider\Internet::class 必须被自己的提供者替换。

内置提供者

除了 Faker 提供的提供者外,还为 Contao 提供了特殊提供者。

internetAddress

该提供者返回带有协议的 Internet 地址(例如 https://www.example.org/)。在 80% 的调用中,地址将以 www 创建。可以指定要使用的协议(例如 https://http://)。由于 https://http:// 是标准协议,因此不需要指定它们,在这种情况下,条目可以省略。

示例

$GLOBALS['TL_DCA']['tl_member']['fields']['website']['eval']['fakerMethod']     = 'internetAddress';
$GLOBALS['TL_DCA']['tl_member']['fields']['website']['eval']['fakerParameter']  = [['https://', 'http://']]; // kann entfallen, da diese Protokolle der Standardfall sind.
$GLOBALS['TL_DCA']['tl_member']['fields']['website']['eval']['fakerOptional']   = [0.9, '']; // 10% chance of getting emtpy string

完整示例

扩展 DCA

在此示例中,通过一些测试数据扩展了 tl_member 表的 DCA。

$GLOBALS['TL_DCA']['tl_member']['fields']['id']['eval']['fakerMethod']               = 'numberBetween';
$GLOBALS['TL_DCA']['tl_member']['fields']['id']['eval']['fakerParameter']            = [1, 9999];
$GLOBALS['TL_DCA']['tl_member']['fields']['tstamp']['eval']['fakerMethod']           = 'unixTime';
$GLOBALS['TL_DCA']['tl_member']['fields']['firstname']['eval']['fakerMethod']        = 'firstName';
$GLOBALS['TL_DCA']['tl_member']['fields']['lastname']['eval']['fakerMethod']         = 'lastName';
$GLOBALS['TL_DCA']['tl_member']['fields']['dateOfBirth']['eval']['fakerMethod']      = 'unixTime';
$GLOBALS['TL_DCA']['tl_member']['fields']['company']['eval']['fakerMethod']          = 'company';
$GLOBALS['TL_DCA']['tl_member']['fields']['street']['eval']['fakerMethod']           = 'streetAddress';
$GLOBALS['TL_DCA']['tl_member']['fields']['postal']['eval']['fakerMethod']           = 'postcode';
$GLOBALS['TL_DCA']['tl_member']['fields']['city']['eval']['fakerMethod']             = 'city';
$GLOBALS['TL_DCA']['tl_member']['fields']['state']['eval']['fakerMethod']            = 'state';
$GLOBALS['TL_DCA']['tl_member']['fields']['country']['eval']['fakerMethod']          = 'country';
$GLOBALS['TL_DCA']['tl_member']['fields']['phone']['eval']['fakerMethod']            = 'phoneNumber';
$GLOBALS['TL_DCA']['tl_member']['fields']['mobile']['eval']['fakerMethod']           = 'phoneNumber';
$GLOBALS['TL_DCA']['tl_member']['fields']['mobile']['eval']['fakerOptional']         = [0.4, ''];
$GLOBALS['TL_DCA']['tl_member']['fields']['fax']['eval']['fakerMethod']              = 'phoneNumber';
$GLOBALS['TL_DCA']['tl_member']['fields']['fax']['eval']['fakerOptional']            = [0.2, ''];
$GLOBALS['TL_DCA']['tl_member']['fields']['email']['eval']['fakerMethod']            = 'email';
$GLOBALS['TL_DCA']['tl_member']['fields']['language']['eval']['fakerMethod']         = 'languageCode';
$GLOBALS['TL_DCA']['tl_member']['fields']['login']['eval']['fakerMethod']            = 'unixTime';
$GLOBALS['TL_DCA']['tl_member']['fields']['username']['eval']['fakerMethod']         = 'userName';
$GLOBALS['TL_DCA']['tl_member']['fields']['disable']['eval']['fakerMethod']          = 'boolean';
$GLOBALS['TL_DCA']['tl_member']['fields']['disable']['eval']['fakerParameter']       = [80]; // chance of getting true
$GLOBALS['TL_DCA']['tl_member']['fields']['start']['eval']['fakerMethod']            = 'unixTime';
$GLOBALS['TL_DCA']['tl_member']['fields']['stop']['eval']['fakerMethod']             = 'unixTime';
$GLOBALS['TL_DCA']['tl_member']['fields']['dateAdded']['eval']['fakerMethod']        = 'unixTime';
$GLOBALS['TL_DCA']['tl_member']['fields']['lastLogin']['eval']['fakerMethod']        = 'unixTime';
$GLOBALS['TL_DCA']['tl_member']['fields']['currentLogin']['eval']['fakerMethod']     = 'unixTime';
$GLOBALS['TL_DCA']['tl_member']['fields']['loginAttempts']['eval']['fakerMethod']    = 'numberBetween';
$GLOBALS['TL_DCA']['tl_member']['fields']['loginAttempts']['eval']['fakerParameter'] = [0, 3];
$GLOBALS['TL_DCA']['tl_member']['fields']['loginAttempts']['eval']['fakerOptional']  = [0.9, 0]; // 10% chance of 0
$GLOBALS['TL_DCA']['tl_member']['fields']['locked']['eval']['fakerMethod']           = 'unixTime';

// serialisierte Daten
$GLOBALS['TL_DCA']['tl_member']['fields']['groups']['eval']['fakerMethod']           = 'numberBetween';
$GLOBALS['TL_DCA']['tl_member']['fields']['groups']['eval']['fakerParameter']        = [1, 10];
$GLOBALS['TL_DCA']['tl_member']['fields']['groups']['eval']['fakerSerial']           = [1,5]; // Anzahl der serialisierten Datensätze: [min., max.]

// internetAddressProvider
$GLOBALS['TL_DCA']['tl_member']['fields']['website']['eval']['fakerMethod']          = 'internetAddress';
$GLOBALS['TL_DCA']['tl_member']['fields']['website']['eval']['fakerParameter']       = [['https://', 'http://']];
$GLOBALS['TL_DCA']['tl_member']['fields']['website']['eval']['fakerOptional']        = [0.9, '']; // 10% chance of getting emtpy string
$GLOBALS['TL_DCA']['tl_member']['fields']['website']['eval']['fakerSerial']          = [1,5];

创建 50 个数据记录

$factory    = \Contao\System::getContainer()->get('esit_fakertoolbox.services.factories.fakerfactory');
$faker      = $factory->getFaker('tl_member');
$testData   = $faker->getRows(50);

运行测试

在扩展目录中调用以下命令

build/runtests.sh