# 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 天前到現在的任意時間
留言