Как проверить метод, выполняющий http-запрос? - PullRequest
1 голос
/ 05 августа 2020

Пишу тесты в Laravel. Однако у меня проблемы, потому что я не умею тестировать. Есть способ сделать http-запрос, как показано ниже. Как бы вы обычно тестировали этот метод? Должен ли я использовать URL-адрес или макет, который действительно доступен?

PHP 7.4.6 Laravel 7.0

<?php

namespace App\Model;

use Illuminate\Support\Facades\Http;
use Exception;

class Hoge
{
    public function getText(string $url, ?string $user, ?string $password, string $ua): bool
    {
        $header = ["User-Agent" => $ua];
        $httpObject = $user && $password ? Http::withBasicAuth($user, $password)->withHeaders($header) : Http::withHeaders($header);

        try {
            $response = $httpObject->get($url);
            if ($response->ok()) {
                return $response->body();
            }
        } catch (Exception $e) {
            return false;
        }

        return false;
    }
}

Ответы [ 3 ]

1 голос
/ 05 августа 2020

Чтобы создать новый тестовый пример, вы можете использовать make:test Artisan-команду:

php artisan make:test HogeTest

Затем вы можете создать свой HogeTest, учитывая правильность ваших заголовков

<?php

namespace Tests\Feature;

use Tests\TestCase;

class HogeTest extends TestCase
{  
    public function hogeExample()
    {
        $header = ["User-Agent" => $ua];
        $response = $this->withHeaders([
            $header,
        ])->json('POST', $url, ['username' => $user, 'password' => $password]);

        $response->assertStatus(200);
      // you can even dump response
      $response->dump();
    }
}

Это простой пример того, как вы можете изменить его в соответствии с вашими потребностями. Подробнее см. laravel документы

1 голос
/ 05 августа 2020

Функциональность, которая распространяется на другие системы, может быть медленной и сделать тесты хрупкими. Тем не менее, вы хотите быть уверены, что ваш метод getText работает должным образом. Я бы сделал следующее:

  • Создайте набор интеграционных тестов только для вашего getText метода. Эти тесты делают фактические HTTP-запросы к серверу для проверки ожидаемого поведения. Веб-сервер не обязательно должен быть внешней системой. Вы можете использовать php встроенный веб-сервер для предоставления тестовых URL-адресов. Вы можете найти статью здесь , которая направит вас в этом направлении.

  • Для всех остальных функций, использующих метод getText, я бы высмеял этот метод, чтобы проводите тесты быстро.

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

Я предпочитаю Postman для тестирования веб-сервера / API. https://www.postman.com/downloads/

...