Версия: 6.x
burger close
Тесты системного окружения

В ReadyScript 3.0 была добавлена новая утилита в разделе Управление → Сайты под названием "Самотестирование". Данная утилита особенно полезна, при смене хостинга, чтобы узнать соответствуют ли на новом хостинге настройки требованиям платформы ReadyScript. Часто бывает так, что скрипт успешно запускается, но отсутствие необходимых модулей PHP или настроек способны давать сбой лишь при выполнении какой-то операции или переходе в какой-либо раздел сайта, утилита создана с целью информирования и предотвращения подобных ситуаций заранее.

selftest.png
Самотестирование

Утилита последовательно запускает тесты и выдает результат. Если результат по какому-либо тесту отрицательный, то отображается пояснение для устранения несоответствия.

Если вы разрабатываете индивидуальный модуль, для которого требуется особые серверные настройки, рекомендуем создавать тест серверного окружения. Чтобы пользователь мог понять, что не так с его настройками в случае возникновения непредвиденного поведения системы.

Рассмотрим как происходит процесс тестирования. Когда пользователь запускает самотестирование, ReadyScript выполняет поиск классов-тестов по маске \{ИМЯ МОДУЛЯ}\Model\SystemCheck\Test\{ИМЯ КЛАССА ТЕСТА}. Класс обязательно должен быть потомком от класса Main::Model::SystemCheck::AbstractSystemTest.

Посмотрим, что из себя представляет данный абстрактный класс:

<?php
namespace Main\Model\SystemCheck;
/**
* Абстрактный класс одного системного теста
*/
abstract class AbstractSystemTest
{
/**
* Возвращает название теста
*
* @return string
*/
abstract public function getTitle();
/**
* Возвращает описание теста
*
* @return string
*/
abstract public function getDescription();
/**
* Выполняет тест, возвращает true случае успеха, в противном случае false
*
* @return bool
*/
abstract public function test();
/**
* Возвращает рекомендации для прохождения теста. Метод вызывается, если test() вернул false
*
* @return string
*/
public function getRecommendation()
{}
}

Как видно, он выступает частично в роли интерфейса и описывает набор обязательных для реализации методов у потомков. Рассмотрим на примере, как должен выглядеть один тест:

<?php
namespace Main\Model\SystemCheck\Test;
class XmlReader extends AbstractSystemTest
{
/**
* Возвращает название теста
*
* @return string
*/
function getTitle()
{
return t('PHP модуль XMLReader');
}
/**
* Возвращает описание теста
*
* @return string
*/
function getDescription()
{
return t('Для корректного чтения больших XML файлов требуется модуль XMLReader');
}
/**
* Выполняет тест, возвращает true случае успеха, в противном случае false
*
* @return bool
*/
function test()
{
return class_exists('\XMLReader', false);
}
/**
* Возвращает рекомендации для прохождения теста. Метод вызывается, если test() вернул false
*
* @return string
*/
function getRecommendation()
{
return t('Включите или установите модуль XMLReader в настройках вашего хостинга');
}
}