Как протестировать конечную точку Laravel / Sanctum с помощью токенов CSRF - PullRequest
2 голосов
/ 02 августа 2020

У меня есть безголовый экземпляр laravel, подключенный к SPA в субдомене. В качестве своего первого теста я хочу видеть 401 при попытке получить данные пользователя из api без входа в систему. Мой путь api определяется следующим образом:

Route::middleware('auth:sanctum')->get('/user', 'UserAccountController@get_profile');

Я знаю, что токен CSRF необходим перед пользователь может успешно подключиться к приложению, но я не уверен, как включить это в свой процесс тестирования, как показано ниже

public function testExample()
{
    $response = $this->get('/api/user');
    $response->assertStatus(401); //  getting a 500 instead
}

В части документации Sanctum testing я см. следующий метод:

Sanctum::actingAs( factory(User::class)->create(), ['view-tasks'] );

Проблема здесь для меня в том, что я не хочу пытаться загрузить этот путь как пользователь, я хочу знать, как имитировать клиентскую машину, имеющую токен , но не авторизован. Возможно ли это?

1 Ответ

0 голосов
/ 03 августа 2020

Согласно «Нику» в чате laravel Slack, мне нужно было изменить запрос на следующее:

public function testExample()
{
    $response = $this->getJson('/api/user');
    $response->assertStatus(401);
}

get() предполагает, что вы выполняете обычный запрос, тогда как getJSON() обрабатывает необходимые настройки заголовка. Этот вызов вернул 401 так же, как я вижу в своем приложении.

Кроме того, для проверки гипотетического JSON ответа

$response->assertJson([
  "message" => "User Unauthorized"
]);
можно использовать следующее.
...