[Day 24] 几个Json的测试方式

Laravel另外还提供了许多的测试方法,

测试多个使用者

我们今天可能从API取得了多个使用者的资料,
譬如以下的情况

Route::get('/users', function () {
    return User::all();
});

我们在测试的时候可以写成这样

$response
    ->assertJson(fn (AssertableJson $json) =>
        $json->has(3)
             ->first(fn ($json) =>
                $json->where('id', 1)
                     ->where('name', '小鱼')
                     ->missing('password')
                     ->etc()
             )
    );

has(3)表示有三个User,
其中我们要检查第一笔资料(first),
id应该是 1,
name应该是 小鱼,
不应该有password这个参数。

测试Model在Array里面

我们今天有一个API长这样

Route::get('/users', function () {
    return [
        'meta' => [...],
        'users' => User::all(),
    ];
})

我们写了一个测试如下:

$response
    ->assertJson(fn (AssertableJson $json) =>
        $json->has('meta')
             ->has('users', 3)
             ->has('users.0', fn ($json) =>
                $json->where('id', 1)
                     ->where('name', '小鱼')
                     ->missing('password')
                     ->etc()
             )
    );

表示我们预期会有一个meta参数,
然後使用者会有3个,
其中的第一个使用者,
id应该是 1,
name应该是 小鱼,
不应该有password这个参数。

或是可以简化成这样,
少做一次动作,
也能达到同样的结果:

$response
    ->assertJson(fn (AssertableJson $json) =>
        $json->has('meta')
             ->has('users', 3, fn ($json) =>
                $json->where('id', 1)
                     ->where('name', '小鱼')
                     ->missing('password')
                     ->etc()
             )
    );

测试参数的类型

我们也可以用测试的方法来确认参数的类型是否吻合,
譬如这样:

$response->assertJson(fn (AssertableJson $json) =>
    $json->whereType('id', 'integer')
         ->whereAllType([
            'users.0.name' => 'string',
            'meta' => 'array'
        ])
);

我们也可以用 | 或是 Array 来指定多种类型

$response->assertJson(fn (AssertableJson $json) =>
    $json->whereType('name', 'string|null')
         ->whereType('id', ['string', 'integer'])
);

这样我们可以根据不同的需求,
灵活运用测试方法来达到我们的目的。


<<:  [Day24]C# 鸡础观念- 物件导向(oop)~建构方法(Constructor)

>>:  [Day11] Flutter with GetX flutter toast & Overlay

Leetcode 挑战 Day 11 [242. Valid Anagram]

242. Valid Anagram 今天我们一起挑战leetcode第242题Valid Anag...

关於伪元素 ( Pseudo-elements )

伪元素有以下: ::after (:after) ::backdrop ::before (:bef...

Golang快速入门-5(Day8)

export/unexport(private/public) 在golang中,如果要实现priv...

[Day 11] SRE - 事後检讨,拜托拜托让我吸个经验值

从历史中学习 我们最讨厌事件历史重演QQ 在每次遇到问题後,我们全员都会一起开个检讨会议,当中会提到...

C# WebSocket实作双向通讯

本文将透过WebSocketSharp来实作WebSocket Client使用js Server使...