laravel test 하기

test 만들기

php artisan make:test UserTest

 

테스트 작성

<?php

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

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

 

다음 명령어로 구동

phpunit

 

Mocking

Cache 등의 Facade 사용시 Mockery 로 목킹을 해줘야 정상 동작함.

<?php

class FooTest extends TestCase
{
    public function testGetIndex()
    {
        Cache::shouldReceive('get')
                    ->once()
                    ->with('key')
                    ->andReturn('value');
		
		 Cache::shouldReceive('has')
                    ->once()
                    ->with('key')
                    ->andReturn('true');

        $this->visit('/users')->see('value');
    }
}

mocking 시 app 에서 호출 안 된 코드를 mocking 하면 에러가 발생함. (Ex: Cache::has('key') 를 호출하는 부분이 실제 app 에 없는데 위와 같이 mocking 할 경우)

 

 

CI 연동

  1. Plan 생성
  2. "Source checkout" Job 추가
  3. composer install Job 생성
     

    composer install --no-interaction --prefer-dist --no-suggest
  4. phpunit 연동. bamboo 는 command 의 arg 가 없으면 안 되므로 아래처럼 -c phpunit.xml 추가 
     
  5. phpUnit 이 성공했으면 deploy 하도록 envoy Job 추가
     
  6. Plan 실행!

 

CI 에서 PHPunit을 실행할 경우 APP_KEY 를 못 찾으므로 phpunit.xml 에 다음과 같이 APP_KEY 를 설정해야 함.

<php>
	<env name="APP_KEY" value="base64:IpDEx1l9abRRaIY+86ZcTQDiTpR2ZRxienH5anP/nRE="/>
</php>

 

Ref