Laravel впроваджує більш точний спосіб тестування помилок валідації за допомогою методу assertOnlyJsonValidationErrors. Цей інструмент надає розробникам змогу точно перевірити, які помилки валідації виникли, без ризику неочікуваних результатів.
Тестування API-ендпоінтів або відправки форм вимагає підтвердження присутності очікуваних помилок валідації, а також відсутності неочікуваних. Раніше досягти такого рівня точності вимагало безлічі перевірок і не завжди було зрозуміло.
Традиційний підхід виглядав наступним чином:
$this->post('/user')
->assertJsonValidationErrors(['email'])
->assertJsonMissingValidationErrors(['name']);
Цей спосіб перевірки має суттєвий недолік: він не зазнає невдачі, якщо виникають неочікувані помилки валідації, наприклад, помилка 'phone'. Це ускладнює гарантування точної роботи логіки валідації.
Новий метод Laravel пропонує всеосяжне рішення:
$this->post('/user')->assertOnlyJsonValidationErrors(['email']);
Ця одна перевірка підтверджує три важливі моменти:
Цей метод значно покращує тестування в практичних застосунках:
class ProductControllerTest extends TestCase
{
/** @test */
public function price_is_required_when_creating_product()
{
$this->postJson('/api/products', [
'name' => 'Premium Widget',
'description' => 'High-quality product',
'category_id' => 1
])
->assertStatus(422)
->assertOnlyJsonValidationErrors(['price']);
}
/** @test */
public function multiple_product_fields_can_fail_validation()
{
$this->postJson('/api/products', [
'name' => '',
'price' => 'not-a-number'
])
->assertStatus(422)
->assertOnlyJsonValidationErrors([
'name',
'price',
'description',
'category_id'
]);
}
}
Цей підхід допомагає виявити тонкі проблеми валідації, які інакше могли б залишитися непоміченими, такі як невірне спрацьовування правил валідації або їх відсутність у потрібний момент. Підтверджуючи повний набір помилок валідації, ви можете бути впевнені, що функції цілісності даних у вашому додатку працюють так, як задумано