Laravel - Testing - Database (官方文件原子化翻譯筆記)

# Introduction

學習一個框架, Ray 的想法是, 在深入理解底層實作的原理之前, 應該先知道這個框架的 使用方法; 先學習怎麼使用這個前人造的輪子, 再學習怎麼樣一個輪子。
所以本篇文章重點在於細讀官方文件, 並將內容理解後以 Q&A 的方式記錄下來, 加速學習以及查詢。


# Introduction

# Resetting The Database After Each Test

以下的 Laravel Testing example code 的意思是?
  • Example:
    <?php
    class ExampleTest extends TestCase
    {
    use RefreshDatabase;

    public function test_basic_example()
    {
    $response = $this->get('/');

    // ...
    }
    }
  • Answer:
    使用 RefreshDatabase trait, 這樣每次 testing 之前都會 refresh database, 不讓之前的 test 影響到這次的 test

# Defining Model Factories

# Concept Overview

Model Factories 部分請參考 Seeding


# Running Seeders

以下的 Laravel Testing example code 的意思是?
  • Example:
    <?php
    public function test_orders_can_be_created()
    {
    $this->seed();

    $this->seed(OrderStatusSeeder::class);

    // ...
    }
  • Answer:
    在 testing 中可以直接使用 seed() 來執行定義好的 seeders
以下的 Laravel Testing example code 的意思是?
  • Example:
    <?php
    class ExampleTest extends TestCase
    {
    protected $seed = true;

    // ...
    }
  • Answer:
    在 testing class 中定義 $seed property 為 true, 那每次 refresh database 時都會自動執行 db:seed
以下的 Laravel Testing example code 的意思是?
  • Example:
    <?php
    use Database\Seeders\OrderStatusSeeder;

    protected $seeder = OrderStatusSeeder::class;
  • Answer:
    當 testing class 中的 $seed property 設為 true 時, 每一次 refresh database 都會自動執行 db:seed, 可在 seeder property 定義要執行哪一個 seed class

# Available Assertions

# assertDatabaseCount

以下的 Laravel Testing example code 的意思是?
  • Example:
    <?php
    $this->assertDatabaseCount('users', 5);
  • Answer:
    assert users table 中有五筆資料

# assertDatabaseHas

以下的 Laravel Testing example code 的意思是?
  • Example:
    <?php
    $this->assertDatabaseHas('users', [
    'email' => 'sally@example.com',
    ]);
  • Answer:
    assert users table 中有 email column 且 value 為 sally@example.com

# assertDatabaseMissing

以下的 Laravel Testing example code 的意思是?
  • Example:
    <?php
    $this->assertDatabaseMissing('users', [
    'email' => 'sally@example.com',
    ]);
  • Answer:
    assert users table 中沒有 email column 且 value 為 sally@example.com 這筆資料

# assertDeleted

以下的 Laravel Testing example code 的意思是?
  • Example:
    <?php
    use App\Models\User;

    $user = User::find(1);

    $user->delete();

    $this->assertDeleted($user);
  • Answer:
    assert 指定的 Eloquent model 已被刪除
以下的 Laravel Testing example code 的意思是?
  • Example:
    <?php
    $this->assertSoftDeleted($user);
  • Answer:
    assert 指定的 Eloquent model 已被 soft deleted

# Additional

以下的 Laravel example code 的意思是?
  • Example:
    <?php
    public function signIn($user = null)
    {
    return $this->actingAs($user ?: User::factory()->create());
    }
  • Answer:
    建立並 login 一個 fake user
Laravel testing 中, 若要 assert relation, 可以使用哪個 method?

assertInstanceOf()

以下的 Laravel example code 的意思是?
  • Example:
    <?php
    'payment_method' => $this->faker->randomElement(['wechat', 'alipay']),
  • Answer:
    隨機選一個
以下的 Laravel example code 的意思是?
  • Example:
    <?php
    'paid_at' => $this->faker->dateTimeBetween('-30 days'),
  • Answer:
    30 天前到現在的任意時間
Laravel - Carbon Laravel - Package - Telescope (官方文件原子化翻譯)

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×