1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel5.1 testingにin-memoryなsqliteを使う

Last updated at Posted at 2015-12-09

一通りまとまった情報が見つからず、時間を食ったのでまとめ。
キャッシュのクリアを忘れてひどい目にあった。
やりたいことは表題の通り。

必要なパッケージの追加

composer.jsonに追加

composer.json
{
    "require-dev": {
        // ...
        "doctrine/dbal": "^2.5"
    },
    //...
}

インストール

$ composer update

database.phpに設定を追加

config/database.php
    'connections' => [

        'sqlite' => [
            // ...
        ],

        // 以下を追加
        'sqlite_testing' => [
            'driver' => 'sqlite',
            'database' => ':memory:',
            'prefix' => '',
        ],

phpunitで使用するDB設定を指定

testingの時、上記の設定を使うようにDB_CONNECTIONの行を追加
phpunit.xmlを環境ごとに変えたいこともあるかもしれないので
そういう時はphpunit.xml.defaultなどを作成したほうがいいかもしれない。

phpunit.xml
    <php>
        ....
        <env name="DB_CONNECTION" value="sqlite_testing"/>
    </php>

注意!!!
ここで設定のキャッシュをクリア
気づかないと辛い目に遭う

$ php artisan config:clear

DatabaseMigrations trait

テストごとにdbのmigrateとresetをする。
setUp()でArtisan::call('migrate')を呼ぶ方法もあるみたいだけど
DatabaseMigrationsトレイトを使う方が簡単と思われる。

use Illuminate\Foundation\Testing\DatabaseMigrations;

class ExampleTest extends TestCase
{
    use DatabaseMigrations; // 追加

    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testBasicExample()
    {
        // your test
    }
}

テスト用データ投入

factoryが用意されてるので以下参照
Userクラスのfactoryが初めから書かれている。

/database/factories/ModelFactory.php
$factory->define(App\User::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->email,
        'password' => bcrypt(str_random(10)),
        'remember_token' => str_random(10),
    ];
});

使い方

public function testSeeUser()
{
    $user = factory(App\User::class)->make([
        'name' => 'marisa' //各fieldは自由に上書きできる
    ]);
    $user->save();
    $this->seeInDatabase('users', ['name' => 'marisa']);
}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?