Как протестировать конечную точку Laravel/Sanctum с токенами CSRF

У меня есть безголовый экземпляр 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 я вижу следующий метод:

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

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


person Shane    schedule 02.08.2020    source источник


Ответы (1)


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

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

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

Кроме того, для проверки гипотетического ответа JSON можно использовать следующее.

$response->assertJson([
  "message" => "User Unauthorized"
]);
person Shane    schedule 03.08.2020