경로에서 단위 테스트 만들기

8590 단어 laravelunittestpest
이전에는 응용 프로그램에서 단위 테스트 생성을 건너뛸 수 있지만 더 많은 기술 부채를 방지하기 위해 응용 프로그램에 단위 테스트가 필요하다고 생각합니다.

하지만... 테스트할 경로와 화면이 엄청나게 많습니다. 어디서 시작하나요?

모든 응용 프로그램 경로에 대해 가능한 모든 단위 테스트를 작성하는 것이 좋습니다.

이 게시물은 애플리케이션의 경로 목록을 기반으로 단위 테스트를 자동으로 생성하는 방법을 다룹니다.

TLDR;

장인 명령을 만들고,

php artisan make:command GenerateUnitTestCommand


그리고 다음과 같이 클래스를 업데이트합니다.

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Symfony\Component\Console\Output\BufferedOutput;

class GenerateUnitTestCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'test:generate';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Generate tests from routes';

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        $this->buffer = new BufferedOutput();
        $this->callBuffer('route:list', [
            '--json' => true,
            '--except-vendor' => true,
        ]);

        $routes = json_decode($this->buffer->fetch(), JSON_OBJECT_AS_ARRAY);

        if (count($routes) == 0) {
            return $this->components->error("Your application doesn't have any routes.");
        }

        $this->info(count($routes).' routes found');

        foreach ($routes as $route) {
            if (empty($route['name'])) {
                $this->warn('Empty route name. Skip generate unit test for '.'('.$route['method'].') '.$route['uri']);

                continue;
            }
            $this->line('Generating unit test for '.'('.$route['method'].') '.$route['uri']);
            $class = str($route['name'])->replace('.', ' ')->headline()->replace(' ', '').'Test';

            $this->call('pest:test', [
                'name' => $class,
                '--force' => true,
            ]);
        }

        return 0;
    }

    /**
     * Call another console command.
     *
     * @param  \Symfony\Component\Console\Command\Command|string  $command
     * @param  array  $arguments
     * @return int
     */
    public function callBuffer($command, array $arguments = [])
    {
        return $this->runCommand($command, $arguments, $this->buffer);
    }
}


이제 다음을 간단히 실행할 수 있습니다.

php artisan generate:test


이렇게 하면 경로를 기반으로 가능한 모든 테스트가 생성됩니다.

이제 단위 테스트 작성을 시작할 기준선이 생겼습니다.

참고하세요. 저는 PestPHP을 사용하고 있습니다.

그래서, 다음은 무엇입니까?

모델, API 통합, Livewire를 기반으로 클래스를 생성할 수 있습니다. 그러나 이러한 클래스가 채워지는 방법과 테스트를 생성하는 방법을 이해해야 합니다.

지금은 경로를 기반으로 작성하고 단위 테스트를 생성합니다.

좋은 웹페이지 즐겨찾기