Модуль проверяет код текущего сайта по заданиям Академии 1С-Битрикс. Отчет генерируется в реальном времени на странице настроек модуля /bitrix/admin/settings.php?lang=ru&mid=intervolga.edu
- 1 курс = 1 папка с уроками = 1 пространство имен (напр Intervolga\Edu\Tests\Course1)
- 1 урок = 1 папка с тестами = 1 пространство имен (напр Intervolga\Edu\Tests\Course1\Lesson1)
- 1 тест = 1 файл = 1 класс-наследник Intervolga\Edu\Tests\BaseTest
Каждый тест должен проверять что-то одно. Это значит, что тестов будет много.
"Душа" теста — метод run(). Именно этот метод вызывает модуль для проверки. Метод ничего не возвращает. Он должен либо завершиться, либо выдать исключение \Intervolga\Edu\Exceptions\AssertException. Исключения \Intervolga\Edu\Exceptions\AssertException генерируются классом \Intervolga\Edu\Asserts\Assert и его наследниками.
В пространстве Intervolga\Edu\Util вспомогательные классы для работы с файлами, папками, инфоблокам, меню, настройками БУС и т.д.
В пространстве Intervolga\Edu\Locator сущности (файлы, папки, инфоблоки и т.п.) которые нужно создавать в рамках Академии, но точное название которых заранее не известно. Чтобы найти их, нужно вызвать метод find().
В пространстве Intervolga\Edu\FilesTree классы для деревьев файлов. Например, любой шаблон bitix:news имеет определенную структуру — она и будет описана в таком классе.
Класс \Intervolga\Edu\Tester знает все тесты.
- Создать новый класс-наследник Intervolga\Edu\Tests\BaseTest в правильном курсе и уроке
- Внести название курса, урока, теста в языковые переменные (все лежат скопом в lang/ru/include.php)
- Ключи должны иметь вид: INTERVOLGA_EDU.COURSE#X# для курса #X#
- INTERVOLGA_EDU.COURSE#X#_LESSON#Y# для урока #Y#
- INTERVOLGA_EDU.COURSE#X#_LESSON#Y#_#TEST# для урока #TEST#, где #TEST# должен равняться имени класса без префикса TEST (например название для теста \Intervolga\Edu\Tests\Course1\Lesson1\TestLicense будет автоматически искаться по ключу INTERVOLGA_EDU.COURSE1_LESSON1_SITECORPORATEMODULE)
- INTERVOLGA_EDU.COURSE#X#_LESSON#Y#_#TEST#_DESCRIPTION для описания урока #TEST#
- Переопределить run()
- В нем получить нужные данные и вызвать соответствующую проверку класса Assert
- Внести класс в \Intervolga\Edu\Tester::getTestClasses
Есть особые правила для тестов Инфоблоков, кода и шаблонов компонентов
- Класс должен быть наследником \Intervolga\Edu\Tests\BaseTestCode
- Метод getFilesToTestCode должен возвращать массив php-файлов для проверки
- lang-переменная нужна только INTERVOLGA_EDU.COURSE#X#_LESSON#Y#_#TEST#_FILES -- название теста класс сгенерирует сам
- Переопределять run() не нужно, класс сделает все сам
- Класс должен быть наследником \Intervolga\Edu\Tests\BaseComponentTemplateTest
- Нужно переопределить метод getLocator() и возвращать класс-локатор конкретного шаблона
- Нужно переопределить метод getComponentTemplateTree() и возвращать класс-дерево шаблона
- Переопределять run() не нужно, класс сделает все сам
- Класс должен быть наследником \Intervolga\Edu\Tests\BaseTestIblock
- Нужно переопределить метод getLocator() и возвращать класс-локатор инфоблока
- Нужно переопределить метод getMinCount() и возвращать минимальное количество элементов ИБ
- Можно переопредлить метод getPropertiesLocators() и возвращать массив классов-локаторов свойств ИБ
- Переопределять run() не нужно, класс сделает все сам
Главный принцип -- не делать throw самому и использовать \Intervolga\Edu\Asserts\Assert::custom по минимуму. Для всех проверок искать подходящий метод в классе \Intervolga\Edu\Asserts\Assert или его наследниках. Если их нет -- добавить.
Если нужно убедиться, что папка существует, не нужно писать if... throw... Нужно вызвать \Intervolga\Edu\Asserts\Assert::directoryExists. Он проверит папку и выдаст исключение, если ее нет.
Если нужно убедиться, что папка удалена, не нужно писать if... throw... Нужно вызвать \Intervolga\Edu\Asserts\Assert::directoryNotExists. Он проверит папку и выдаст исключение, если ее нет.
Если нужно убедиться, что модуль установлен, не нужно писать if... throw... Нужно вызвать \Intervolga\Edu\Asserts\Assert::moduleInstalled. Он проверит модуль и выдаст исключение, если он не установлен.