robier / forge-object
轻松构建对象
dev-master
2019-05-16 22:53 UTC
Requires
- php: ^7.2
Requires (Dev)
- infection/infection: ^0.12.2
- phpstan/phpstan: ^0.11.6
- phpunit/phpunit: ^8
Suggests
- fzaninotto/faker: Easy way to generate random valid data in your forge
This package is auto-updated.
Last update: 2024-09-17 11:28:13 UTC
README
轻松为测试目的构建自己的对象(不适用于生产代码)。
深受Laravel的工厂模式启发,但有一个重大区别,Laravel的工厂模式仅用于创建或持久化模型,但这个库可以创建任何类型的对象(模型、实体、值对象等)。这个库不知道如何持久化东西。
库与框架无关,可以集成在任何框架中。
每个测试有3个主要部分
setup- 设置测试应用程序test- 实际断言cleanup- 删除代码或数据库中的引用
这个库旨在减少测试的设置部分,并减少向对象添加新数据所需的时间,尤其是在你的测试中频繁使用该对象时。
如果你希望在这个库中看到某些功能,请随时贡献或提出问题 :)
安装
可以通过composer安装库
composer require --dev robier/forge-object
用法
首先你需要为你的对象注册forge
$manager = new Robier\ForgeObject\Manager(); $manager->register(\stdClass::class, static function(): \stdClass{ // apply random valid data to object $object = new \stdClass(); $object->active = (bool)rand(0, 1); $object->admin = (bool)rand(0, 1); return $object; })
注册后,你可以向对象添加状态
$manager->registerState(\stdClass::class, 'active', static function(\stdClass $item): void{ // change random data with exact data in states $item->active = true; }) $manager->registerState(\stdClass::class, 'admin', static function(\stdClass $item): void{ // change random data with exact data in states $item->admin = true; })
假设你需要在测试中有一个随机的stdClass对象
$oneStdClassObject = $manager->new(\stdClass::class)->one();
或者你需要一个活跃的随机stdClass
$oneStdClassObject = $manager->new(\stdClass::class)->state('active')->one();
也许你需要多个活跃的随机stdClass对象,比如15个
$manyActiveStdClassObjects = $manager->new(\stdClass::class)->state('active')->many(15);
状态可以组合,并且它们按照提供给state方法的顺序应用。如果你想得到一个既是活跃又是管理员的随机stdClass,你可以这样做
$oneStdClassObject = $manager->new(\stdClass::class)->state('active', 'admin')->one();
本地开发
使用以下命令构建docker
docker/build
在docker内运行任何命令
docker/run {script}
例如
docker/run composer install
运行所有测试
docker/run composer run test