Laravel factory state

Laravel 팩토리[doc]

라라벨에서는 Factory를 통해 Model의 데이터에 가짜(Fake)데이터를 생성해 주는 기능이 존재한다.

이를 통해서 PHPUnit과 같은 Test를 진행할 때 원하는 Type의 데이터가 들어가지는지 테스트 하는 등의 기능을 제공하며,
Database Seeding을 통해 Fake 데이터를 넣어 개발 및 테스트를 조금 더 용이하게 해준다.

UserFactory

<?php

use Faker\Generator as Faker;

$factory->define(App\User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
        'remember_token' => str_random(10),
    ];
});

Laravel에서 기본적으로 설정해 주는 UserFactory를 사용하면
factory(User::class)->create()만으로 Fake 유저를 자동으로 생성해 준다.

만약, factory를 자동으로 User를 생성해 주는 기능과 name이 silnex인 User를 생성해야 한다고 했을때,
factory(User::class)->create(['name' => 'silnex'])과 같이 직접 생성되는 값을 제한 할 수 있다.
하지만, name이 silnex인 값이 필요할때 마다 쓰게된다면 이후 silnex가 아닌 다른 값으로 변경할 때 여러 부분을 만져야한다.

UserFactory With State

<?php

$factory->state(App\User::class, 'static_name', function (Faker $faker) {
    return [
        'name' => 'silnex',
        'email' => $faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
        'remember_token' => str_random(10),
    ];
});

Factory를 선언할 때 'static_name'과 같은 상태를 주게 되면
factory(User::class)->states('static_name')->create()로 생성하게 되면 name이 silnex인 결과 값을 불러올 수 있다.

글의 문제가 있다면 댓글을 달아 주세요.

This site uses Akismet to reduce spam. Learn how your comment data is processed.