Тестирование
Тестирование логики в Битриксе опирается на вынос бизнес-правил в сервисный слой, что позволяет покрывать методы изолированными быстрыми unit-тестами в PHPUnit без загрузки ядра. Интеграционные тесты для ORM и корзины запускаются с бутстрапом через prolog_before.php и виртуальными сессиями (BX_SECURITY_SESSION_VIRTUAL) на выделенной тестовой базе данных.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
PHPUnit
-
2
Тестирование API
-
3
Функциональные тесты
Материалы
Официальная документация
-
Composer Новая дока
-
Расширения: раздел «Директория test» Новая дока
Проверь себя
Скидку переписали, через неделю оптовики получили розничную цену. Почему тест на это не написали?
Потому что тестировать было нечего: расчёт лежал в result_modifier.php, а не в сервисе. Тест возможен только у логики, вынесенной в класс модуля с входом и выходом без HTML.
Чем тест сервиса с подменённым репозиторием отличается от теста с загруженным ядром?
Первый не поднимает ядро и базу, работает за миллисекунды и не трогает данные. Второй нужен там, где проверяется само ядро: ORM, события, корзина. Ядро в bootstrap грузится через prolog_before.php с заданным DOCUMENT_ROOT.
Тест контроллера через HTTP стабильно падает на invalid_csrf. Что делать?
Действие с фильтром Csrf ждёт заголовок X-Bitrix-Csrf-Token с текущим sessid или отключённый фильтр для тестового окружения. Если действие не меняет состояние, проверьте, что фильтр там вообще нужен.
Заказчик просит «покрыть тестами оформление заказа». С чего начать, чтобы не увязнуть?
С правила, которое ломалось в последний раз, в виде теста сервиса. Прогон всего sale.order.ajax через браузер — самый дорогой и хрупкий тест, его пишут последним и в одном экземпляре.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить