January 17, 2015

Laravelのクエリスコープをテストするメモ

以下の"Query Scopes"をいかに簡単にテストするか考えてみました。
http://laravel.com/docs/4.2/eloquent#query-scopes

Laravel5を使っていますが、Laravel4でも考え方は同じなはずです。

Illuminate\Database\Eloquent\Model を継承した Fooクラス が、以下のクエリスコープを持っているとします。
public function scopeBar(Builder $q, $baz)
{
    return $q->whereHas('qux', function ($q) use ($baz) {
        $q->where('quxx', $baz);
    });
}
とりあえず、このクエリスコープが組み立てるSQLを、バインドされるパラメータ含めて確認できれば良かったので、以下の方法でやってみました。

1.
storage/database.sqlite を作成。コネクションエラーを回避したいだけなので、空ファイルでOKです。

2.
config/database.php を編集。
'default' => env('DB_DRIVER', 'mysql'),
3.
phpunit.xml に追記。
<env name="DB_DRIVER" value="sqlite"/>
4.
テスト。
public function testScopeBar()
{
    $q = (new Foo())->bar(100);
    $sql = $q->toSql();
    $bindings = $q->getBindings();

    dd($sql, $bindings); // これをテストする
}
より良い方法があれば教えて下さい。

No comments:

Post a Comment