Я пытаюсь проверить свой класс категории.Я использую метод Mockery :: mock () с префиксом «overload:» и методом makePartial ().
При запуске теста у меня появляется эта ошибка:
Mockery\Exception\BadMethodCallException : Method App\Models\Category::getDynamicFieldsForDocument() does not exist on this mock object
Вот мой код:
namespace App\Models;
class Category extends DictionaryBase{
//some methods
public function getDynamicFieldsForDocument()
{
$data = [];
$parents = [];
$allParents = $this->getParents($this->id, $parents);
foreach ($allParents as $parentId) {
$parent = Category::find($parentId);
$fields = $parent->dynamicFields();
foreach ($fields as $field) {
$data[$field['name']] = $field;
}
}
return $data;
}
}
TestCase:
namespace Tests\Unit;
use App\Models\Category;
use Tests\TestCase;
class CategoryModelTest extends TestCase{
//some methods
/**
* @runInSeparateProcess
* @preserveGlobalState disabled
*/
public function testGetDynamicFieldsForDocument()
{
$mockCategory = \Mockery::mock('overload:'.Category::class)->makePartial();
$preparedDynamicFields = $this->prepareDynamicFields();
$preparedCategories = $this->prepareCategories();
$mockCategory->shouldReceive('find')->andReturn($preparedCategories[0], $preparedCategories[1], $preparedCategories[2]);
$mockCategory->shouldReceive('getParents')->andReturn(['1a2b', '3c4d', '5e6f']);
$mockCategory->shouldReceive('dynamicFields')->andReturn(null, $preparedDynamicFields[0], $preparedDynamicFields[1]);
$response = $mockCategory->getDynamicFieldsForDocument();
dd($response);
}
}
Я понятия не имею, почему у меня все еще есть ошибка.Я думаю, когда -> вызывается метод makePartial (), он должен имитировать только те методы, которые вызываются -> shouldReceive ()
EDIT:
Теперь я создаю ложный экземплярбез: перегрузки и насмешливого метода 'find' следующим образом:
`$mockCategory->shouldReceive('find')->andReturn($preparedCategories[0], $preparedCategories[1], $preparedCategories[2]);`
Мой метод поиска выглядит так:
public static function find($id) {
return $id ? self::list(config(static::IDENT.'.fields'), (new Filter('and'))->add('id', $id, '')->toArray(),[],1,1)[0] ?? null : null;
}
И это моя ошибка:
Ошибка: неверные параметры для App \ Exceptions \ ApiException ([string $ message [, long $ code [, Throwable $ previous = NULL]]])
Это потому, что API вызова метода спискатак что, похоже, этот метод вызывается без макета.Я знаю, что не могу издеваться над статическим методом, но раньше, когда я использовал: перегрузка была возможной.Что сейчас?