Фундаментальное не понимаем моков?

Ребят, всем привет. Вопрос по 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


Очень прошу помощи, хотя бы советом. Пока еще испытываю сложности с тестами особенно моками. Но очень хочу понять, как оно работает. Возможно дадите ссылочку на толковую статью?
  • Вопрос задан
  • 143 просмотра
Пригласить эксперта
Ответы на вопрос 1
Проблема должна пройти, если создавать моки в setUp, а в самих тестах уже конфигурировать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы