РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
251 of 274 menu

Метод withoutLazyLoading

Метод withoutLazyLoading класса Livewire предназначен для использования в тестовой среде. Он отключает ленивую загрузку (lazy loading) для всех отношений Eloquent в рамках текущего теста. Это полезно для предотвращения непредвиденных запросов к базе данных и выявления проблем N+1. Метод не принимает параметров и возвращает тот же экземпляр класса Livewire для цепочки вызовов.

Синтаксис

<?php Livewire::withoutLazyLoading(); ?>

Пример

Давайте протестируем компонент, который выводит список статей с авторами. Без отключения ленивой загрузки тест может пройти, но в реальности возникнут лишние запросы.

<?php namespace App\Livewire; use Livewire\Component; use App\Models\Article; class Articles extends Component { public $articles; public function mount() { $this->articles = Article::all(); } public function render() { return view('livewire.articles'); } } ?>
<div> @foreach ($articles as $article) <div> <h3>{{ $article->title }}</h3> <p>{{ $article->author->name }}</p> </div> @endforeach </div>
<?php namespace Tests\Feature\Livewire; use Tests\TestCase; use Livewire\Livewire; use App\Livewire\Articles; use App\Models\Article; use App\Models\User; class ArticlesTest extends TestCase { public function test_articles_are_displayed() { $author = User::factory()->create(['name' => 'John Doe']); Article::factory()->create([ 'title' => 'First Article', 'author_id' => $author->id ]); Livewire::withoutLazyLoading(); $component = Livewire::test(Articles::class); $component->assertSee('First Article'); $component->assertSee('John Doe'); } } ?>

Результат выполнения кода:

OK (1 test, 2 assertions)

Пример

Рассмотрим ситуацию, когда нужно убедиться, что в компоненте не происходит лишних запросов к базе данных. Метод withoutLazyLoading поможет обнаружить такие проблемы.

<?php namespace App\Livewire; use Livewire\Component; use App\Models\User; class Users extends Component { public $users; public function mount() { $this->users = User::with('profile')->get(); } public function render() { return view('livewire.users'); } } ?>
<div> @foreach ($users as $user) <div>{{ $user->name }} - {{ $user->profile->bio }}</div> @endforeach </div>
<?php namespace Tests\Feature\Livewire; use Tests\TestCase; use Livewire\Livewire; use App\Livewire\Users; use App\Models\User; use App\Models\Profile; class UsersTest extends TestCase { public function test_users_without_lazy_loading() { $user = User::factory()->create(['name' => 'Jane Doe']); Profile::factory()->create([ 'user_id' => $user->id, 'bio' => 'Software Developer' ]); Livewire::withoutLazyLoading(); $component = Livewire::test(Users::class); $component->assertSee('Jane Doe'); $component->assertSee('Software Developer'); } } ?>

Результат выполнения кода:

OK (1 test, 2 assertions)

Если бы в компоненте использовалась ленивая загрузка, тест с withoutLazyLoading завершился бы ошибкой, что помогло бы вовремя обнаружить проблему производительности.

Смотрите также

  • метод test,
    который создает экземпляр компонента для тестирования
  • метод actingAs,
    который устанавливает аутентифицированного пользователя для теста
  • класс Testable,
    который предоставляет методы для проверки компонента в тестах
  • метод assertSet,
    который проверяет значение свойства компонента
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить