Day 17 跟着官方文件学习Laravel-再战测试

今天继续来写测试啦!!昨天我们测试destory方法後,今天我想写store的测试。

首先,我们先测试成功的情境。

  • arrange
    设定想要新增的资料

  • act
    Route::post('/user', [UserController::class, 'store']);

  • assert
    {‘success’ => ‘true’}

/**
     * @test
     * @testdox 成功注册一笔资料
     */
    public function storeSuccess()
    {
        //arrange
        $id = 10;
        $account = "JimChien";
        $password = "123Acb_";
        $username = "Jim";

        // act&assert
        $this->postJson("/api/user", [
            'id'=>$id,
            'account'=>$account,
            'password'=>$password,
            'username'=>$username
        ])
        ->assertStatus(200)
        ->assertJson([
            'success' => 'true'
        ]);
    }

再来是写帐号重复注册的案例

/**
     * @test
     * 
     */
    public function storeAccountRepeat()
    {
        //arrange
        $id = 10;
        $account = "JimChien";
        $password = "123Acb_";
        $username = "Jim";
        User::create([
            'id' => $id,
            'account' => $account,
            'password' => $password,
            'name' => $username
        ]);

        // act&assert
        $this->postJson("/api/user", [
            'id'=>$id,
            'account'=>$account,
            'password'=>$password,
            'username'=>$username
        ])
        ->assertStatus(200)
        ->assertJson([
            'success' => 'false',
            'error'=> '帐号重复注册'
        ]);
    }

接下来写的是密码验证的测试,这边想利用data provider去提供一系列不合格的密码去测试。

首先我们在UserTest写一个method,提供你想要测试的资料,包含你想测试的所有情境

public function invalidPasswordProvider()
    {
        // 密码长度不足6位
        yield ["123"];
        // 密码不含大写字母
        yield ["123abc_"];
        // 密码不含小写字母
        yield ["123ABC_"];
        // 密码不含数字
        yield ["ABCabc_"];
        // 密码不含特殊符号
        yield ["ABCabcd"];
    }

再利用dataProvider注解,将资料依序带入method

/**
     * @test
     * @dataProvider invalidPasswordProvider
     */
    public function storeAccountPasseordInvalid(string $password)
    {
        //arrange
        $id = 10;
        $account = "JimChien";
        $username = "Jim";

        // act&assert
        $this->postJson("/api/user", [
            'id'=>$id,
            'account'=>$account,
            'password'=>$password,
            'username'=>$username
        ])
        ->assertStatus(200)
        ->assertJson([
            'success' => 'false',
            'error'=> '密码需要6位数以上,并且至少包含大写字母、小写字母、数字、符号各一'
        ]);
    }

来测试看看!

这边有看到他帮我们带入了那五笔资料,且测试成功!


<<:  予焦啦!Golang 执行绪与作业系统执行绪

>>:  自动化测试,让你上班拥有一杯咖啡的时间 | Day 17 - 如何勾选元素

Laravel:Route Wildcards 2

前言 Laravel:Route Wildcards - iT 邦帮忙::一起帮忙解决难题,拯救 I...

[Day08] 什麽是贪婪法

#402 - Remove K Digits 连结: https://leetcode.com/p...

Flutter体验 Day 22-Model

Model 资料层 在开发应用程序的过程里,我们通常会定义 Model 的类别用来处理资料结构或是资...

使用 package 来管理类别吧!

昨天我们虽然各别把 .java 跟 .class 分类到不同的资料夹, 但长久下来还是不够的,我们还...

第 14 天 我不是要压榨你我是给你个成长的机会|Reactive Form

前情提要 我们整理专案後,现在专案有更明确的模组来封装元件,不仅让 App 效能提升,也让专案更「语...