Покращте точність тестування валідації за допомогою assertOnlyJsonValidationErrors у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 29 квітня, 2025
Laravel пропонує новий метод для точного тестування валідаційних помилок через assertOnlyJsonValidationErrors. Чи готові ви дізнатися, як цей інструмент може підвищити точність ваших тестів і гарантувати правильність валідації у ваших застосунках?

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'
        ]);
    }
}

Цей підхід допомагає виявити тонкі проблеми валідації, які інакше могли б залишитися непоміченими, такі як невірне спрацьовування правил валідації або їх відсутність у потрібний момент. Підтверджуючи повний набір помилок валідації, ви можете бути впевнені, що функції цілісності даних у вашому додатку працюють так, як задумано