Symfony PhpUnit для симуляции встроенного метода PHP

Я использую prophesize метод издеваться над классом

Пример:

$partnerMembers = $this->prophesize(PartnerMembers::class);

Как издеваться над PHP встроенным методом?

именно мне нужно издеваться locale_accept_from_http($language);

У вас есть идея, как справиться с этим?

1 ответ

Решение

Вы не издеваетесь над нативным методом PHP, а вместо этого пишете обертку для всего, что вам нужно.

class LocaleListener
{
    protected $language;

    public function __construct($language) {
        $this->language = $language;
    }

    public function getPreferredLocale() {
        return locale_accept_from_http($this->language);
    }
}

И теперь вы можете посмеяться над этим с:

$listener = $this->prophesize(LocaleListener::class);
$listener->getPreferredLocale()->willReturn('en_GB');

Если вам интересно, как Symfony предлагает обрабатывать языковые стандарты пользователей из заголовка, проверьте этот EventListener в их демонстрационном приложении: https://github.com/symfony/demo/blob/master/src/EventSubscriber/RedirectToPreferredLocaleSubscriber.php

Другие вопросы по тегам