수색…
소개
테스트 가능한 코드를 작성하는 것은 견고하고 유지 보수가 가능하며 민첩한 프로젝트를 구축하는 데있어 중요한 부분입니다. 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_ENV
는 array
가 CACHE_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 명령을 사용하여 구성 캐시를 지우십시오!