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