수색…


소개

테스트 가능한 코드를 작성하는 것은 견고하고 유지 보수가 가능하며 민첩한 프로젝트를 구축하는 데있어 중요한 부분입니다. PHP의 가장 널리 사용되는 테스트 프레임 워크 인 PHPUnit에 대한 지원은 바로 Laravel에 내장되어 있습니다. PHPUnit은 모든 새로운 Laravel 애플리케이션의 루트 디렉토리에있는 phpunit.xml 파일을 사용하여 구성됩니다.

tests 디렉토리는 루트 디렉토리에도 있으며 응용 프로그램의 각 부분을 테스트하기위한 논리를 담고있는 개별 테스트 파일을 포함합니다. 물론 응용 프로그램을 빌드 할 때 개발자가 이러한 테스트를 작성하는 것은 귀하의 책임이지만 Laravel은 ExampleTest.php 파일을 포함하고 있습니다.

<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testBasicExample()
    {
        $this->visit('/')
             ->see('Laravel 5');
    }
}

testBasicExample() 메서드에서 사이트의 색인 페이지를 방문하여 해당 페이지의 어딘가에 Laravel 5 라는 텍스트가 표시되는지 확인합니다. 텍스트가 없으면 테스트가 실패하고 오류가 발생합니다.

미들웨어가없고 새로운 데이터베이스로 테스트

숙련공이 테스트를 실행하기 전에 새로운 데이터베이스를 마이그레이션하게하려면 use DatabaseMigrations . 또한 Auth와 같은 미들웨어를 사용하지 않으려면 use WithoutMiddleware .

<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;

class ExampleTest extends TestCase
{
    use DatabaseMigrations, WithoutMiddleware;

    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testExampleIndex()
    {
        $this->visit('/protected-page')
         ->see('All good');
    }
}

다중 데이터베이스 연결을위한 데이터베이스 트랜잭션

DatabaseTransactions 특성을 통해 데이터베이스는 테스트 중에 모든 변경 사항을 롤백 할 수 있습니다. 여러 데이터베이스를 롤백하려면 $connectionsToTransact 속성을 설정해야합니다

use Illuminate\Foundation\Testing\DatabaseMigrations;

class ExampleTest extends TestCase
{
     use DatabaseTransactions;

     $connectionsToTransact =["mysql","sqlite"] //tell Laravel which database need to rollBack

    public function testExampleIndex()
    {
        $this->visit('/action/parameter')
         ->see('items');
    }
}

메모리 데이터베이스를 사용하여 설정 테스트하기

설정을 완료하면 테스트 프레임 워크 (PHPUnit)가 :memory: 데이터베이스를 사용합니다.

config / database.php

'connections' => [

    'sqlite_testing' => [
        'driver'   => 'sqlite',
        'database' => ':memory:',
        'prefix'   => '',
    ],
    .
    .
    .

./phpunit.xml

    .
    .
    .
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="APP_URL" value="http://example.dev"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
        <env name="DB_CONNECTION" value="sqlite_testing"/>
    </php>
</phpunit>

구성

phpunit.xml 파일은 테스트를위한 기본 설정 파일이며 PHPUnit으로 테스트하기 위해 이미 설정되어 있습니다.

기본 테스트 환경 APP_ENVarrayCACHE_DRIVER 캐시 드라이버 인 testing 로 정의됩니다. 이 설정을 사용하면 테스트하는 동안 데이터 (세션 / 캐시)가 유지되지 않습니다.

홈스테드와 같은 특정 환경에 대한 테스트를 실행하려면 기본값을 다음과 같이 변경하십시오.

<env name="DB_HOST" value="192.168.10.10"/>
<env name="DB_DATABASE" value="homestead"/>
<env name="DB_USERNAME" value="homestead"/>
<env name="DB_PASSWORD" value="secret"/>

또는 임시 메모리 데이터베이스를 사용하려면 다음을 수행하십시오.

<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>

Laravel 문서 에서 유념해야 할 마지막 사항은 다음과 같습니다 .

테스트를 실행하기 전에 config:clear Artisan 명령을 사용하여 구성 캐시를 지우십시오!



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow