Laravel сеансов базы данных в тестах phpunit - PullRequest
0 голосов
/ 11 марта 2020

В настоящее время я работаю над функцией, позволяющей пользователям просматривать все свои сеансы на разных устройствах. Теперь, когда я пытаюсь протестировать эту функцию, я делаю следующее: (Примечание: я использую Inertia и у меня есть несколько тестовых макросов)

  • Создание миграции:

php artisan session:table

  • Редактировать phpunit.xml:

<server name="SESSION_DRIVER" value="database"/>

  • Поделиться реквизитом в AppServiceProvider:
Inertia::share([
    // a few other props
    'auth' => [
        'user' => [
            // a few other props
            'sessions' => DB::table('sessions')->whereUserId(auth()->user()->id)->get(),
        ],
    ],
]);
  • Написать тест
// The test class is set up correctly with the RefreshDatabase trait

$user = factory(User::class)->create();
$this->signIn($user) // helper for actingAs()
    ->get(route('sessions.index'))
    ->assertPropIs('auth.user.sessions', function ($sessions) use ($user) {
        // gets the 'sessions' page prop and passes the prop value to my callback here
        $userSessions = DB::table('sessions')->whereUserId($user->id)->toArray();
        return $sessions === $userSessions;
        // The problem here is that $sessions is an empty array :(
        // BUT $userSessions does contain the active session of $user
    });

Чего я не понимаю, так это того, что когда я вручную тестирую опору sessions в браузере (проверка с Vue devtools) Я получаю все сеансы обратно, а массив не пустой.

Теперь, при попытке запросить страницу снова в том же тесте, я получаю сеанс ...

$this->signIn($user);

$this->get(route('sessions.index'))
    ->assertPropIs('auth.user.sessions', function ($sessions) {
        dd($sessions); // returns an empty array
    });

$this->get(route('sessions.index'))
    ->assertPropIs('auth.user.sessions', function ($sessions) {
        dd($sessions); // Returns the following
        array:1 [
            0 => array:6 [
                "id" => "BaIZnSNxjVEEtJyeD3uLKrreG9U0bbSjc8kQreGo"
                "user_id" => "1"
                "ip_address" => "127.0.0.1"
                "user_agent" => "Symfony"
                "payload" => "YTozOntzOjY6Il90b2tlbiI7czo0MDoiZHptd2V4ZkVwcndaRERaQTNDSmdVVEN1OUpNcXRqQlN0Tnhna0pjYiI7czo5OiJfcHJldmlvdXMiO2E6MTp7czozOiJ1cmwiO3M6MzU6Imh0dHBzOi8vbGltYm9zZXJ2aWNlLnRlc3QvZGFzaGJvYXJkIjt9czo2OiJfZmxhc2giO2E6Mjp7czozOiJvbGQiO2E6MDp7fXM6MzoibmV3IjthOjA6e319fQ=="
                "last_activity" => "1583916772"
            ]
        ]
    });

Реальная функциональность работает, но тесты не зеленые. Кто-нибудь может объяснить, почему это происходит? Я часами гуглил и не нашел решения, которое бы сработало для меня. Спасибо

...