Черта Laravel 10 WithoutEvents выдает невозможность отключить ошибку событий

Мое приложение сильно зависит от событий. Однако многие из моих тестов не требуют событий, поэтому я полагаюсь на\Illuminate\Foundation\Testing\WithoutEventsчерта, чтобы отключить их. При переходе на Laravel 10 с 9 мои тесты выдают «Невозможно отключить события. ApplicationTrait не используется».

Я создал новую установку Laravel 10 и добавил трейт WithoutEvents в тестовый пример:

      <?php

namespace Tests\Feature;

// use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutEvents;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    use WithoutEvents;

    /**
     * A basic test example.
     */
    public function test_the_application_returns_a_successful_response(): void
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }
}

Запуск тестов сvendor/bin/phunitвозвращает:

      Time: 00:00.138, Memory: 22.00 MB

There was 1 error:

1) Tests\Feature\ExampleTest::test_the_application_returns_a_successful_response
Exception: Unable to disable events. ApplicationTrait not used.

Если я сделаю то же самое в новой установке Laravel 9, тест пройдет нормально. Есть идеи, что здесь происходит? FWIW, у меня PHP 8.1.11 и композитор 2.5.4.

1 ответ

Он выдает исключение, потому что, как указывает Aless55 в комментариях к вопросу, черта MocksApplicationServices, которая включалаprotected function withoutEvents()был удален из\Illuminate\Foundation\Testing\TestCase. КогдаWithoutEventstrait не может найти этот метод, выдает ошибку.

В гайде не понятно, что если вы используете WithoutEvents (который не убрали из фреймворка), то нужно переходить на использованиеEvent::fake()в setUp() или в ваших индивидуальных тестах. См. руководство по обновлению: https://laravel.com/docs/10.x/upgrade#service-mocking .

Другие вопросы по тегам