Тест компонента в OctoberCMS

В принципе, тесты в OctoberCMS устроены примерно так же, как и в Laravel. Но поскольку это CMS и у нее есть плагины — к ним можно писать отдельные тесты. Правда, документация по этому вопросу довольно лаконична.

Вот, есть, например, в плагине компонент и на него нужно написать тесты. Чтобы это сделать, нам понадобится экземпляр класса компонента, но как его создать? Просто оператором new не получается. В общем, решение нашлось (не сразу) в дебрях тестов самого октября, привожу, вдруг кто еще искать будет:

$theme = Theme::load('test');
$page = Page::load($theme, 'index.htm');
$layout = Layout::load($theme, 'content.htm');
$controller = new Controller($theme);
$parser = new CodeParser($page);
$pageObj = $parser->source($page, $layout, $controller);
$manager = ComponentManager::instance();
$component = $manager->makeComponent('myComponent', $pageObj);

То есть, оказывается, нужна особая магия в виде создания сущностей из «тестовой» темы и генерации компонента с их помощью. Вот бы узнать, где можно почитать об этом, помимо исходников.

Кстати, третьим аргументом в makeComponent() можно передать массив свойств компонента. Поможет протестировать логику, когда свойства должны отличаться от дефолтных.

Комментарии