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'])
);
這樣我們可以根據不同的需求,
靈活運用測試方法來達到我們的目的。