Как проверить промежуточное ПО маршрутов? - PullRequest
2 голосов
/ 09 марта 2020

Допустим, у меня есть группа маршрутов, которые защищены промежуточным программным обеспечением:

Route::group(['middleware' => 'verified'], function () {
    Route::get('/profile', 'ProfileController@show')->name('profile.show');
    Route::get('/settings', 'SettingsController@show')->name('settings.show');
});

Как проверить, что эти маршруты защищены промежуточным программным обеспечением verified? Если я напишу эти тесты, будут ли они рассматриваться как функциональные или модульные тесты?

1 Ответ

1 голос
/ 11 марта 2020

Тестирование промежуточного программного обеспечения в значительной степени зависит от логики c самого промежуточного программного обеспечения и от возможных результатов. Давайте возьмем в качестве примера промежуточное программное обеспечение verified, которое вы привели в качестве примера:

Мы ожидаем, что пользователь будет перенаправлен (302) на страницу «Подтверждение вашей электронной почты», если он не подтвердил свою электронную почту (атрибут email_verified_at) является нулевым), в противном случае мы ожидаем нормального ответа (200).

Как мы можем симулировать доступ пользователя к нашей странице? С помощью метода actingAs. Из документов :

Вспомогательный метод actingAs предоставляет простой способ аутентификации данного пользователя в качестве текущего пользователя.

Так что наш код будет выглядеть примерно так:

use App\User;

class ExampleTest extends TestCase
{
    public function testAccessWithoutVerification()
    {
        // Create a dummy user
        $user = factory(User::class)->create();

        // Try to access the page
        $response = $this->actingAs($user)
                         ->get('/the-page-we-want-to-test');

        // Assert the expected response status
        $response->assertStatus(302);
    }

    public function testAccessWithVerification()
    {
        // Create a dummy user, but this time we set the email_verified_at
        $user = factory(User::class)->create([
            'email_verified_at' => \Carbon\Carbon::now(),
        ]);

        // Try to access the page
        $response = $this->actingAs($user)
                         ->get('/the-page-we-want-to-test');

        // Assert the expected response status
        $response->assertStatus(200);
    }

}

Документы имеют целую страницу , посвященную HTTP-тестам , зацените.

...