Тестирование композиторов Laravel View с помощью насмешек - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь проверить своих View Composers.Всякий раз, когда я передаю объект в $view->with('string', $object), мой тест не проходит.Вот когда я делаю тест следующим образом:

$view
    ->shouldReceive('with')
    ->with('favorites', $this->user->favorites(Ad::class)->get())
    ->once();

Я почти уверен, что это из-за строгой проверки.Поэтому я оглянулся и увидел этот выпуск .Тем не менее, я не могу заставить его работать.Закрытие возвращает true, но тест завершается неудачно:

Mockery \ Exception \ InvalidCountException: метод с ('Favorites', ) из Mockery_3_Illuminate_View_View должен вызываться ровно 1 раз, но вызываться0 раз.

Вот мой текущий тест

public function it_passes_favorites_to_the_view()
{
    $this->setUpUser(); // basically sets $this->user to a User object

    Auth::shouldReceive('user')
        ->once()
        ->andReturn($this->user);

    $composer = new FavoritesComposer();

    $view = Mockery::spy(View::class);

    $view
        ->shouldReceive('with')
        ->with('favorites', Mockery::on(function($arg) {
            $this->assertEquals($this->user->favorites(Ad::class)->get(), $arg);
        }))
        ->once();

    $composer->compose($view);
}

FavoritesComposer class:

public function compose(View $view)
{
    $user = Auth::user();

    $favorites = $user 
        ? $user->favorites(Ad::class)->get()
        : collect([]);

    $view->with('favorites', $favorites);
}

Как мне проверить подобный объект?

1 Ответ

0 голосов
/ 12 ноября 2018

Я исправил проблему, заменив $view->with('favorites', $favorites); на $view->with(['favorites' => $favorites]); и затем протестировав ее следующим образом:

$view
    ->shouldReceive('with')
    ->with(['favorites' => $this->user->favorites(Ad::class)->get()])
    ->once();

Итак, по существу, использование только одного параметра в with() -методе - это то, что исправило егодля меня.

...