Тестирование Laravel: Не удается войти в систему 2 пользователей в одном тестовом случае с JWT - PullRequest
0 голосов
/ 22 октября 2019

Мое приложение использует JWT для обработки аутентификации. В тестовом примере я пытаюсь войти в систему с двумя пользователями, получить токены для вызова других API. Но похоже, что он действует как 1 пользователь (первый)

Проверьте этот код, после входа в систему я вызываю API для получения информации о пользователе. Но он всегда возвращает информацию пользователя 1.

private function authenticate()
{
    $user = factory(User::class)->create();
    $token = \JWTAuth::fromUser($user);
    return [
        'Authorization' => 'Bearer ' . $token,
    ];
}

public function test2Login()
{
    $user1 = $this->authenticate();
    $user2 = $this->authenticate();
    // This to make sure the token are different
    $this->assertNotEquals($user1['Authorization'], $user2['Authorization']);

    // Call API to get user information by the token
    $response1 = $this->withHeaders($user1)->get('api/user');
    $response2 = $this->withHeaders($user2)->get('api/user');

    $userId1 = $response1->json()['data']['id'];
    $userId2 = $response2->json()['data']['id'];
    // Both response return information of the same user, so this testcase fail
    $this->assertNotEquals($userId1, $userId2);
}

Я ожидаю, что $userId1 и $userId2 различны. На данный момент он возвращает тот же идентификатор.

Я отлаживаю в GetUserFromToken.php, который является промежуточным ПО JWT. Токены, полученные в обоих запросах, одинаковы. Это странная причина в тестовом примере. Я убедился, что функция authenticate возвращает 2 разных токена.

У кого-нибудь есть идеи? Спасибо

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