@ganjo888

Как правильно замокать __invoke метод?

Тестируемый класс
class Handler {

public function __invoke($params)
{
// У TemplateService тоже есть метод __invoke()
 $templateService = new TemplateService();
 $templateService($string);
}
}

я хочу замокать new TemplateService() делаю это так
class HandlerTest extends TestCase
{
    protected function setUp(): void
    {
        parent::setUp();
        $this->mockTemplateService();
    }

    public function testInvoke()
    {
        $handler = new Handler();
        $handler->__invoke($params);
    }

    private function mockTemplateService()
    {
        $templateService = \Mockery::mock(TemplateService::class);
        $templateService->shouldReceive('__invoke')
            ->with(__DIR__ .'templates/template.docx')
            ->andReturn(file_get_contents(__DIR__ . '../../data/template.docx'));
        return $this->app->instance(TemplateService::class, $templateService);
    }
}

Но почему то я не получаю то что я замокал. Тест стучится в оригинальный new TemplateService(). Буду благодарен за помощь.
  • Вопрос задан
  • 206 просмотров
Пригласить эксперта
Ответы на вопрос 1
uDenX
@uDenX
PHP Developer
На сколько я понял Вы добавляете мок в контейнер, но потом вручную создаете объект, а не запрашиваете у контейнера
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы