4.モッキングコールバック私は現在、Laravelにパッケージのテストを書いている
私は、where
メソッドがコールバックを使用している場合を除き、ほぼすべての時間を働くIlluminate\Database\Query\Builder
をあざけるています、私はできませんコールバック内のメソッドが呼び出されているかどうかを確認します。
私はあなたのうちの1人が光を放つことを望んでいました。
$query = \Mockery::mock('Illuminate\Database\Query\Builder', function ($mock) {
/** @var \Mockery\Mock $mock */
$mock->shouldReceive('where');
$mock->shouldReceive('orWhere')->twice();
});
そしてorWhere
を呼び出す必要があり、実際のwhere
方法。 注:ビルダーモックが下のクラスに渡されます。
$builder = new LaravelBuilder($query);
これは、次のコードを含む$builder->filter()
を呼び出します。それは一度もorWhere
を実行しないよう
$this->query->where(function ($query) use ($filterData) {
/** @var \Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder $query */
foreach($filterData['columns'] as $colData) {
/** @var \Samvaughton\Ldt\Column $column */
$column = $colData['column'];
// See if this column is searchable
if (!$column->isSearchable() || !$colData['searchable']) continue;
// If the individual column term is empty, use the main term
$term = (empty($colData['term'])) ? $filterData['term'] : $colData['term'];
// Actually apply the filter
$query->orWhere($column->getSqlColumn(), "LIKE", "%{$term}%");
}
});
主要部分が下ビット$query->orWhere
で、PHPUnitテストは毎回失敗します。あなたがcontinue
のためにそれの実行に達しないかもしれないと言う前に、私が渡しているデータはこれを可能にします。
これは私がwhere
メソッドを最初に嘲笑していることによるものだと思われます。 foreach
の前にexit
を含めると、コールバック内で何も実行していないことを示す実行されません。私はそれがデフォルトの動作であることを知っていますが、Mockeryに同じ/類似のコールバックを実行させるにはどうすればよいですか?
shouldExpect
を使用して部分模擬を試しましたが、完全に理解していません。私はまた、このシナリオでは幸運の周りを検索しようとしました。
私がコールバック内でモックを使用する方法を学ぶことができれば嬉しいです。
これは本当に私を助けました! Mockeryドキュメントの第2引数としてクロージャを渡すことについて何も見つけられません。これをどうやって知ったのですか? – alexw