[Day 21] 针对API的单元测试(一)

我们再回来写API的单元测试,
之前的范例只有写到回传单一值而已,
但是通常我们写的API,
会是一个Json的格式,
而且可能会有复杂的内容,
可能有固定的格式,
也可能没有。

我们接下来要实作一个API,
当我们用Post传送一个name资料过去的时候,
就要回传新增资料成功的回应。
(当然只是模拟,我们这次不会操作资料库)
我们在BrowserUnitTest.php新增一个方法

public function test_user_add_name()
{
    $this->post('/api/user/add', ['name' => 'Sally'])
         ->seeJson([
             'created' => true,
         ]);
}

我们预期这个Json会包含 ['created' => true] 这个内容,
然後执行测试,
当然这个测试一定会失败
php artisan test
https://ithelp.ithome.com.tw/upload/images/20210922/20105694aJfkM33dMM.png

如同我们所预期的,
测试回传了错误,
然後我们接下去写API

我们先把原来的api.php改成跟web.php一样的型式

use App\Http\Controllers\API\APIController;
Route::post('/getLeapYear/{year}', [APIController::class, 'checkLeapYear']);

然後在APIController新增一个API方法
记得要 use Validator;

function AddUser(Request $request)
{
    $input = $request->all();

    //验证规则
    $rules = [
        //名称
        'name' => [
            'required',
        ],
    ];

    //验证资料
    $validator = Validator::make($input, $rules);

    $result = [];
    if($validator->fails())
    {
        $result['created'] = false;
    }
    else
    {
        $result['name'] = $input['name'];
        $result['created'] = true;
    }
    return json_encode($result);
}

然後在api.php新增

Route::group(['prefix' =>'user'], function(){
    Route::post('/add', [APIController::class, 'AddUser']);
});

我们再执行一次测试
php artisan test
https://ithelp.ithome.com.tw/upload/images/20210922/20105694QXab6N1yPJ.png

我们测试成功了!


<<:  从零开始的8-bit迷宫探险【Level 14】让主角奔跑吧!Running Sam

>>:  #7 Python进阶教学4

How to Reset forgotten root password in RHEL/CentOS 7/8

As a Linux Administrator, You must know the import...

Day04 - 纯 Html - 复杂型别 collection

Case01 Controller [HttpPost] public IActionResult ...

当SFC在Windows上无反应时如何解决?

“在过去的几年中,我一直在使用系统档案检查器(SFC)扫描和修复损坏档案,但是昨天,当我尝试执行sf...

NNI如何搬到Colab02

若看到以下画面,恭喜你,又成功了! /bin/bash: -c: line 0: syntax er...

【Day 04】阿公级的系统分析方法 -- DFD

前言 上一篇谈到领域驱动设计并不是横空出世,而是经由过去几十年的逐步演化而成的,因此,我们就来看看阿...