Laravelのパッケージのテストに便利なパッケージLaravelMeetup Tokyo Vol.3
永宮 悠大
自己紹介永宮 悠大(Yuta Nagamiya)
仕事
SIerのソフトウェアエンジニア
CodeIgniter暦1年半、Laravel暦半年
ソーシャル
Twitter:
GitHub:
Qiita:
@ngmy
ngmy
ngmy
モチベーションLaravelらしいテストコードを書きたい
Laravelのコアクラスをテストで使いたい
Travis CIで継続的インテグレーションしたい
Laravelらしくないテストclass SomePackageTest extends PHPUnit_Framework_TestCase
{
    public function testSomething()
    {
        $ngmy = new SomePackage;
        $ngmy­>someMethod();
        // Some test
    }
}
Laravelらしいテストclass SomePackageTest extends PHPUnit_Framework_TestCase
{
    public function testSomething()
    {
        SomePackage::someMethod();
        // Some test
    }
}
コアクラスの利用class User extends Eloquent {}
class SomePackageTest extends PHPUnit_Framework_TestCase
{
    public function testSomething()
    {
        // Make test data
        $u = new User;
        $u­>name  = 'ngmy';
        $u­>email = 'ngmy@example.com';
        $u­>save();
        // Some test
    }
}
testbench
Laravelのパッケージ開発用のユニットテストヘルパー
パッケージのテストでコアクラスを利用できるようになる
orchestral /testbench
インストールcomposer.json
{
    "require­dev": {
        "orchestra/testbench": "2.1.*"
    }
}
使い方(1/4)
tests/TestCase.phpに基底クラスを定義する
class TestCase extends OrchestraTestbenchTestCase {}
使い方(2/4)
composer.jsonのautoloadに基底クラスを追加する
{
    "autoload": {
        "classmap": [
            "tests/TestCase.php"
        ]
    }
}
使い方(3/4)
基底クラスでサービスプロバイダーを登録する
protected function getPackageProviders()
{
    return array(
        'NgmySomePackageSomePackageServiceProvider',
    );
}
使い方(4/4)
基底クラスでエイリアスを登録する
protected function getPackageAliases()
{
    return array(
        'SomePackage' => 'NgmySomePackageFacadesSomePackage'
    );
}
Laravelらしいテストが書けるuse Package;
class SomePackageTest extends TestCase
{
    protected function testSomething()
    {
        Package::someMethod();
        // Some test
    }
}
コアクラスを利用できる(1/2)
use IlluminateDatabaseEloquentModel as Eloquent;
class User extends Eloquent {}
コアクラスを利用できる(2/2)
class SomePackageTest extends TestCase
{
    public function setUp()
    {
        parent::setUp();
        // Set up a database
        $this­>app['config']­>set('database.default', 'sqlite');
        $this­>app['config']­>set('database.connections.sqlite', array(
            'driver'   => 'sqlite',
            'database' => ':memory:',
            'prefix'   => '',
        ));
        // Create a table
        Schema::create('users', function ($table)
        {
            $table­>increments('id');
            $table­>string('name');
            $table­>timestamps();
        });
    }
}
これでパッケージ開発が捗る
Travis CIでも動くよ!
楽しいパッケージ開発を!
ご清聴ありがとうございました

Laravelのパッケージのテストに便利なパッケージ