Как утверждать, что Laravel Controller возвращает представление с правильными данными? - PullRequest
0 голосов
/ 04 февраля 2020

Мне нужно знать, как утверждать, что Laravel Контроллер возвращает представление с правильными данными.

Моя простая функция контроллера:

public function index() {

        $users = User::all();
        return view('user.index', ['users' => $users]);
    }

Я использую такие функции, как assertViewIs чтобы узнать, загружен ли нужный файл вида:

$response->assertViewIs('user.index');

Также используется asserViewHas, чтобы узнать, что взята переменная "users":

$response->assertViewHas('users');

Но я не знаю, как Утвердить, если коллекция извлечения пользователей содержит данных пользователей или нет.

Заранее спасибо.

1 Ответ

1 голос
/ 04 февраля 2020

В тестах я использовал бы черту RefreshDatabase для получения чистой базы данных по каждому тесту. Это позволяет вам создавать данные, необходимые для этого теста, и делать предположения относительно этих данных.

Тест может выглядеть примерно так:

// Do not forget to use the RefreshDatabase trait in your test class.
use RefreshDatabase;

// ...

/** @test */
public function index_view_displays_users()
{
    // Given: a list of users
    factory(User::class, 5)->create();

    // When: I visit the index page
    $response = $this->get(route('index'));

    // Then: I expect the view to have the correct users variable
    $response->assertViewHas('users', User::all());
}

Ключ заключается в использовании признака , Теперь, когда вы создаете 5 фиктивных пользователей с фабрикой, они будут единственными в вашей базе данных для этого теста, поэтому вызов Users::all() в вашем контроллере вернет только этих пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...