Day16 跟着官方文件学习Laravel-初写测试

今天要来写测试,laravel有提供测试的方法。其中分成Unit及Feature,Unit专注於功能较单一独立的程序,而Feature则是偏向整合功能型的测试。
首先,先来创建一个测试吧。

php artisan make:test UserTest

我们今天想要测试的是昨天刚写好的API,我们先以destory这个方法来实测,测的过程中,尽量保持把3A写出来!

class UserTest extends TestCase
{
    use RefreshDatabase;
    /**
     * @test
     */
    public function destorySuccess()
    {
        //arrange
        $id = 10;
        $account = "JimChien";
        $password = "123Acb_";
        $username = "Jim";
        User::create([
            'id' => $id,
            'account' => $account,
            'password' => Hash::make($password),
            'name' => $username
        ]);
        // act&assert
        $this->deleteJson("/api/user/$id")
        ->assertStatus(200)
        ->assertJson([
            'success' => 'true'
        ]);
    }
}

这边我们先测当delete成功时回传success的情境,我们可以利用RefreshDatabase这个trait,在每次测试完就重置资料库,这样有助於之前测试用的资料不会影响下一次测试。

  • arrange
    我们先初始想要的参数如id, account...等等,接着创建一笔资料,完成arrange
  • act
    我们要测试的目标就是
Route::delete('/user/{id}', [UserController::class, 'destroy']);

这个route。

  • assert
    我们预期他回传status = 200且回传{'success' => 'true'}

3A设定好後,我们来测试看看吧。


接着我们来写delete失败的案例

/**
     * @test
     */
    public function destoryFailed()
    {
        //arrange
        $id = 10;
        // act&assert
        $this->deleteJson("/api/user/$id")
        ->assertStatus(200)
        ->assertJson([
            'success' => 'false'
        ]);
    }

这边我们一样保持3A,跟success不一样的是这次没有先建User了,那就不会delete所以回传{'success' => 'false'}

这边我们可以使用testdox去描述我们每个function在测试的情境是什麽,只需在注解中加上@testdox,并在执行指令时加上--testdox,结果如下

OK~今天完成了一小部分的测试,明天再继续看看测试还有什麽功能吧。


<<:  Day 30 - 实作 Amazon API GateWay 整合 AWS Lambda 与 Dynamodb

>>:  [从0到1] C#小乳牛 练成基础程序逻辑 Day 15 - if..else if..else 条件判断

Day08:别为了钱而放弃权力

今天来谈谈修饰子(Modifier)。 修饰子我觉得可以分为三大类,第一种就是封装用的修饰子,第二种...

Jetpack Compose navigation + Koin

现在我们有了编辑便利贴页面还有编辑文字页面,该是时候好好的来思考要怎麽切换页面了!流程如下:使用者选...

Day26 [实作] 一对一视讯通话(6): 关闭镜头或麦克风

我们在视讯通话中很常用的一个功能就是关闭镜头或是麦克风,今天我们将实作此功能 1. 在 index....

Day 18 - Spring Boot 日志纪录

日志纪录是网站的一个非常重要的功能,不论是对外的使用者或是对内的管理,实际运营上一定都会遇到许许多多...

HTML笔记(01)-前端、後端和全端

那天跟朋友聊天,我跟他说我的同学是打程序的所以薪水很高。他很不解,什麽叫做打程序的?我就说就资料探勘...