У меня есть строка кода в обработчике событий Laravel 5, которая выглядит так:
$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
Похоже, что это реализовано с использованием __call()
магического метода PHP, так как мне поиздеваться над этим? Я попытался создать __call()
макет, но это вызывает массу ошибок, связанных с тем, что метод increment()
не реализован.