У меня есть строка кода в обработчике событий Laravel 5, который выглядит следующим образом:Mocking Laravel Model :: прирост() с издевательством
$this->event->batch->increment('attempted_jobs');
$this->event
это событие, которое вызывает обработчик и $this->event->batch
содержит мой Batch
модель. Все это приводит к увеличению столбца attempted_jobs
в моей базе данных, так что это довольно простой материал.
Я хотел бы иметь возможность протестировать этот обработчик событий, я использую Codeception и Mockery. Мой макет для $this->event->batch
выглядит следующим образом:
$batch = m::mock('MyVendor\MyApp\Batch');
$batch->shouldReceive('increment')->once()->with('attempted_jobs');
Это, однако, вызывает проблемы - increment()
является защищенным методом Model
и, следовательно, не может быть издевался. Вот точная ошибка:
InvalidArgumentException: increment() cannot be mocked as it a protected method and mocking protected methods is not allowed for this mock
Это, как представляется, реализовано с использованием PHP магического метода __call()
, так как я дразнить это? Я попытался создать макет __call()
, но это издает тонны ошибок, связанных с методом increment()
, который не выполняется.