Ребят, всем привет. Вопрос по unit тестам, благо с интеграционными разобрался достаточно хорошо)
Есть метод сервиса, который кладет какое-то кол-во джобов в очередь. Это же метод принимает аргументом интерфейс.
Метод
public function createThumbnails(PartnerSettingRepositoryInterface $partnerSettingRepository)
{
$seconds = 2;
foreach ($this->emailTemplateRepository->getTemplates() as $template) {
$job = new CreateCustomTemplatesThumbnail($template, $this, $partnerSettingRepository);
$job->delay(now()->addSeconds($seconds));
$job->onQueue(config('queue.connects.files'));
dispatch($job);
$seconds += 2;
}
}
Я пишу тест, который должен проверить этот метод.
function it_should_push_create_thumbnails_queue()
{
Queue::fake();
$tmp = factory(EmailTemplate::class)->make();
$emailTemplateRepository = $this->getMockBuilder(EmailTemplateRepository::class)
->disableOriginalConstructor()
->onlyMethods(['getTemplates'])
->getMock();
$emailTemplateRepository->expects($this->once())->method('getTemplates')
->withAnyParameters()
->willReturn(collect($tmp));
$emailTemplateRepository->getTemplates();
//До вот этого момента все работает, все что ниже - ломается.
$service = $this->createMock(EmailThumbnailService::class);
$service->expects($this->once())->willReturnSelf();
$partnerSettingRepositoryInterface = $this->getMockBuilder(PartnerSettingRepositoryInterface::class);
$partnerSettingRepositoryInterface->onlyMethods([])->getMock();
$service->createThumbnails($partnerSettingRepositoryInterface);
Queue::assertPushedOn(
config('queue.connects.files'),
CreateCustomTemplatesThumbnail::class
);
}
Получаю ошибку
TypeError: Argument 1 passed to Mock_EmailThumbnailService_6dcb9b1d::createThumbnails() must implement interface App\Repositories\Settings\PartnerSettingRepositoryInterface, instance of PHPUnit\Framework\MockObject\MockBuilder given, called in /var/project/tests/Unit/Services/Newsletter/EmailThumbnailServiceTest.php on line 138
Очень прошу помощи, хотя бы советом. Пока еще испытываю сложности с тестами особенно моками. Но очень хочу понять, как оно работает. Возможно дадите ссылочку на толковую статью?