aaronbullard/factory-biscuit

使用Faker和Firehose Hydrator快速创建PHP类实例进行测试。

v1.0.0 2018-11-24 23:34 UTC

This package is auto-updated.

Last update: 2024-09-25 13:19:40 UTC


README

Maintainability Test Coverage

使用Faker和Firehose Hydrator快速创建PHP类实例进行测试。

安装

git clone git@github.com:aaronbullard/factory-biscuit.git

Composer

安装PHP Composer

composer require aaronbullard/factory-biscuit

测试

composer test

用法

定义您的工厂

// Factories.php

use Faker\Generator;
use FactoryBiscuit\Factory;
use FactoryBiscuit\Tests\Mocks\Entity\Foo;
use FactoryBiscuit\Tests\Mocks\Entity\Bar;

$factory->define(Foo::class, function(Generator $faker, Factory $factory){
    return [
        'bar' => function() use ($factory){
            return $factory->of(Bar::class)->make();
        },
        'baz' => $faker->word,
        'qux' => $faker->word
    ];
});

$factory->define(Bar::class, function(Generator $faker, Factory $factory){
    return [
        'bar' => $faker->word
    ];
});

加载您的工厂文件

use FactoryBiscuit\Factory;

$factory = new Factory();

$factory->load(__DIR__ . '/Factories.php');

示例

创建实例

$foo = $factory->of(Foo::class)->make();

$this->assertInstanceOf(Foo::class, $foo);

创建多个实例

$foos = $factory->of(Foo::class)->times(3)->make();

$this->assertInstanceOf(Foo::class, $foos[0]);
$this->assertCount(3, $foos);

覆盖实例的属性

$foo = $factory->of(Foo::class)->make([
    'baz' => 'newBaz'
]);

$this->assertEquals('newBaz', $foo->baz());

创建特殊定义的实例类型

// Create a factory of class Foo with settings of 'colors'
$factory->defineAs(Foo::class, 'colors', function($faker, $factory){
    return [
        'bar' => 'red',
        'baz' => 'green',
        'qux' => 'blue'
    ];
});

$foo = $factory->of(Foo::class, 'colors')->make();

$this->assertInstanceOf(Foo::class, $foo);
$this->assertEquals('red', $foo->bar());
$this->assertEquals('green', $foo->baz());

实现FactoryBiscuit\ManagerRegistry接口以在创建时持久化实例

$factory = new Factory(Faker::create(), $managerRegistry);

// call the 'create' method to create a persisted instance
$user = $factory->of(User::class)->create();

$this->assertInstanceOf(User::class, $user);
$this->assertTrue(
    DB::table('users')->where('id', '=', $user->id)->exists()
);

更多示例,请参阅测试:tests\FactoryTest.php