Метод create
Метод create применяется к экземпляру фабрики в тестах Laravel
и создаёт одну или несколько моделей, сохраняя их в базе данных.
Первым параметром можно передать массив атрибутов для переопределения
стандартных значений фабрики. Метод возвращает созданную модель
или коллекцию моделей при использовании с count.
Синтаксис
<?php
Factory::create($attributes = []);
?>
Пример
Давайте создадим одну модель статьи с использованием фабрики:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Models\Article;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ArticleTest extends TestCase
{
use RefreshDatabase;
public function test_create_article()
{
$article = Article::factory()->create();
$this->assertDatabaseHas('articles', [
'id' => $article->id,
]);
}
}
?>
Результат выполнения кода:
"OK (1 test, 1 assertion)"
Пример
Давайте создадим модель с переопределёнными атрибутами:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Models\Article;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ArticleTest extends TestCase
{
use RefreshDatabase;
public function test_create_article_with_custom_attributes()
{
$article = Article::factory()->create([
'title' => 'Custom Title',
'status' => 'published',
]);
$this->assertEquals('Custom Title', $article->title);
$this->assertEquals('published', $article->status);
}
}
?>
Результат выполнения кода:
"OK (1 test, 2 assertions)"
Пример
Давайте создадим несколько моделей с использованием метода count:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Models\Article;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ArticleTest extends TestCase
{
use RefreshDatabase;
public function test_create_multiple_articles()
{
$articles = Article::factory()->count(5)->create();
$this->assertCount(5, $articles);
$this->assertDatabaseCount('articles', 5);
}
}
?>
Результат выполнения кода:
"OK (1 test, 2 assertions)"
Пример
Давайте создадим модели с использованием связей через метод has:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Models\Article;
use App\Models\Comment;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ArticleTest extends TestCase
{
use RefreshDatabase;
public function test_create_article_with_comments()
{
$article = Article::factory()
->has(Comment::factory()->count(3))
->create();
$this->assertCount(3, $article->comments);
$this->assertDatabaseCount('comments', 3);
}
}
?>
Результат выполнения кода:
"OK (1 test, 2 assertions)"