Laravel тестовых действий, требующих аутентификации - PullRequest
1 голос
/ 25 мая 2020

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

1 Ответ

0 голосов
/ 25 мая 2020

Я делаю запрос с заголовком Authorization, точно воспроизводя то, что происходит в реальном мире.

Я создаю одну черту для своих тестовых случаев и использую там, где требуется аутентификация:

In trait вы генерируете действительный токен JWT для пользователя в заголовке Authorization. В случае, если я использую пакет Tymon для JWTAuth

<?php

namespace Tests\Feature;

use JWTAuth;

trait CallApiTrait {
    /**
     * Simulate call api
     *
     * @param  string $endpoint
     * @param  array  $params
     * @param  string $asUser
     *
     * @return mixed
     */
    protected function callApi($endpoint, $method,$params = [], $email = 'user@email',$password='password')
    {
        $headers = [
            'Accept'=>'application/json',
        ];

        if($email&&$password){
            $token = $token = JWTAuth::attempt(['email'=>$email,'password'=>$password]);
            $headers['Authorization'] = 'Bearer ' . $token;
        }

        return $this->json(
            $method,
            $endpoint,
            $params,
            $headers
        );
    }

И в моем методе тестирования

    class StudentTest extends TestCase {
    use CallApiTrait;
    ...

    public function test_can_request_with_auth(){
        $rs = $this->callApi(route('foo.bar'),'GET');
        $rs->assertStatus(200);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...