Сбой проверки подлинности с использованием Laravel, phpunit и Homestead - PullRequest
2 голосов
/ 21 апреля 2019

Итак, я пытаюсь протестировать функции регистрации и входа в проект Laravel 5.8, работающий на Homestead.

Моя проблема в том, что я не могу заставить тесты (для входа в систему и для регистрации) пройти функции assertAuthenticated () и assertAuthenticatedAs ().

Я создал функцию входа в систему с помощью php artisan make:auth и не сильно изменился, просто создал поле «username» для использования вместо электронной почты.

Когда я тестирую такие вещи, как assertStatus(), $this->get(url), все работает нормально, но когда я добавляю, например, строку $this->assertAuthenticatedAs($user), тест вылетает.

Это моя действительная функция прохождения:

    public function test_login_valid_user()
    {
        $user = factory(User::class)->create();

        $response = $this->post('/login', [
            'username' => $user->username,
            'password' => 'secret'
        ]);

        $response->assertStatus(302);

    }

Если я добавлю строку $this->assertAuthenticatedAs($user) в конце, я получу следующую ошибку:

There was 1 failure:

1) Tests\Feature\Auth\LoginTest::test_login_valid_user
The current user is not authenticated.
Failed asserting that null is not null.

/home/vagrant/code/my_project/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithAuthentication.php:89
/home/vagrant/code/my_project/tests/Feature/Auth/LoginTest.php:39

То же самое происходит в моем тесте регистрации, после регистрации пользователя, когда я пытаюсь проверить $this->assertAuthenticated() Я получаю ту же ошибку.

Итак, я подумал о сессионных проблемах, связанных с Vagrant / Homestead, но я только начал их использовать и не мог найти намека на это. И я очень плохо знаком с PHPUnit и тестированием в целом, я только начинаю понимать, как он работает.

1 Ответ

1 голос
/ 28 июня 2019

У меня была такая же проблема. Для модульных тестов проверка токена CSRF должна быть отключена, но только если вы работаете в режиме APP_ENV = testing. Хотя phpunit.xml переопределял мой «локальный» конфиг, он был настроен на «тестирование». Это не так, потому что PhpStorm не читает этот файл.

Если вы используете PHPStorm, не забудьте проверить путь к файлу конфигурации по умолчанию - phpunit.xml. (Настройки -> Языки и рамки -> PHP -> Тестовые рамки)

...