Я пытаюсь протестировать свои View Composers. Всякий раз, когда я передаю объект $view->with('string', $object)
, мой тест терпит неудачу. Это когда я делаю тест следующим образом:
$view
->shouldReceive('with')
->with('favorites', $this->user->favorites(Ad::class)->get())
->once();
Я почти уверен, что это из-за строгой проверки. Итак, я осмотрелся и увидел эту проблему. Тем не менее, я не могу заставить его работать. Закрытие возвращает true, но тест не проходит:
Mockery\Exception\InvalidCountException : метод with('favorites', ‹ Closure===true >) из Mockery
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); }
Вот мой текущий тест
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:
public function compose(View $view)
{
$user = Auth::user();
$favorites = $user
? $user->favorites(Ad::class)->get()
: collect([]);
$view->with('favorites', $favorites);
}
Как мне протестировать такой объект?