2017-09-29 2 views
0

Ich versuche, ein Standard-Samen für Faker in Laravel einzurichten, die normalerweise auf diese Weise (nicht in Laravel) erreicht:Laravel Modellfabriken mit gleichen Samen zu Testzwecken

<?php 
$faker = Faker\Factory::create(); 
$faker->seed(1234); 

nach Faker der GitHub Seite .

Ich versuche, dies zu tun, damit ich die gleichen Daten jedes Mal erzeugen kann, so dass ich einige Komponententests schreiben kann, aber ich habe keine Idee, wie man das in Laravel macht. Ich habe Laravels Dokumentation überprüft und versucht, das Problem zu googeln, aber ich habe nichts gefunden.

Antwort

1

ist es einfach. Definieren Sie einfach eine Fabrik. Lassen Sie uns einen Blick auf die Standard-Fabrik ausgeliefert mit Laravel 5.5

Datei: Datenbank/Fabriken/ModelFacotry.php

<?php 

/* 
|-------------------------------------------------------------------------- 
| Model Factories 
|-------------------------------------------------------------------------- 
| 
| Here you may define all of your model factories. Model factories give 
| you a convenient way to create models for testing and seeding your 
| database. Just tell the factory how a default model should look. 
| 
*/ 

/** @var \Illuminate\Database\Eloquent\Factory $factory */ 
$factory->define(App\User::class, function (Faker\Generator $faker) { 
    static $password; 

    // Add this line to original factory shipped with laravel. 
    $faker->seed(123); 

    return [ 
     'name' => $faker->name, 
     'email' => $faker->unique()->safeEmail, 
     'password' => $password ?: $password = bcrypt('secret'), 
     'remember_token' => str_random(10), 
    ]; 
}); 

Dann basteln verwenden, es zu testen:

[email protected] ~/demo> php artisan tinker 
Psy Shell v0.8.1 (PHP 7.1.8 — cli) by Justin Hileman 
>>> $user = factory(App\User::class)->make() 
=> App\User {#880 
    name: "Jessy Doyle", 
    email: "[email protected]", 
} 
>>> $user = factory(App\User::class)->make() 
=> App\User {#882 
    name: "Jessy Doyle", 
    email: "[email protected]", 
} 

Laravel Text & Tabellen:

how to define and use factory

Seeding

+0

Das hat nicht wie erwartet funktioniert. Wenn Sie mehr als eine Instanz der Factory generieren, wird derselbe Benutzer mit demselben Namen und derselben E-Mail-Adresse generiert, sofern Sie nicht die eindeutige Option verwenden. Gibt es eine Möglichkeit, dies zu vermeiden? –

+0

Um vom vorherigen Kommentar fortzufahren - sogar mit unique() erzeugt es nicht die gleichen Einträge: ( –

+0

@PetarVasilev Entschuldigung für spät. Ohne unique() erhalten Sie die gleichen faker Daten. –

Verwandte Themen