статический вызываемый метод phpunit в методе

У меня есть этот метод:

public function getLocale()
{
$languageId = $this->_user->language->id;
$page = Wire::getModule('myModule')->getPage($languageId);
$locale = $page->locale;

if (!!$locale) {
return $locale;
}

// fallback to browser's locale
$browserLocale = new SBD_Language();
$locale = $browserLocale->getLanguageLocale('_');

return $locale;
}

Теперь я хочу написать тест для него, но я получаю эту ошибку:
Trying to get property of non-object который вызван Wire::getModule('myModule'),

Поэтому я хотел бы переопределить Wire::getModule ответ с phpunit. Я просто не знаю, как это сделать.

До сих пор я создал макет над классом, в котором метод getLocale помещается, и это все работает нормально, но как бы я сказал этому классу макета, что он на самом деле должен вызывать макет из Wire учебный класс?

2

Решение

Вы можете имитировать статические методы, передавая вызов статическому методу, как таковой

class StaticClass
{
static function myStaticFunction($param)
{
// do something with $param...
}
}

class ProxyClass
{
static function myStaticFunction($param)
{
StaticClass::myStaticFunction($param);
}
}

class Caller
{
// StaticClass::myStaticFunction($param);
(new ProxyClass())->myStaticFunction($param);
// the above would need injecting to mock correctly
}

class Test
{
$this->mockStaticClass = \Phake::mock(ProxyClass::class);
\Phake::verify($this->mockStaticClass)->myStaticMethod($param);
}

Этот пример с Phake, но он должен работать с PHPUnit таким же образом.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]