Created
April 8, 2020 14:54
-
-
Save morozVA/afda988bc6d03d5c5fff4a11002d9580 to your computer and use it in GitHub Desktop.
настройка тестов
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Создание модульных и интеграционных тестов | |
Создано и настроено окружение для использования Codeception как надстройки над PhpUnit, теперь мы можем писать тесты (не только модульные на чистом PhpUnit, но и интеграционные, требующие запущенного приложения), а ещё получать статистику по тому, какой процент кода у нас покрыт этими самыми тестами. | |
Команды: | |
vendor/bin/codecept run - запустить все тесты | |
vendor/bin/codecept run unit --coverage-html='coverage' - сформировать отчёт по степени покрытия кода тестами | |
Контроллеры тонкие, их тестировать не нужно, да и нет возможности, потому что тесты запускаются в консоли, а там нет: веб-сервера, урла, сессий, куков и т.п. Проект запускается как консольное приложение. Так что всё сошлось. | |
Для тестирования сложных вещей есть практика применений фикстур - тестового набора данных. С помощью инструмента Faker создал шаблоны генерации фикстур: | |
/tests/fixtures/data/label.php (он опирается на правила валидации формы LabelForm) | |
/tests/fixtures/data/product.php (для тестирования связей) | |
/tests/fixtures/data/product_label.php (для тестирования связей) | |
Команда для генерации, например: | |
php yii_test fixture/generate-all --interactive=0 --count=100 | |
Результат (создаются файлы с тестовым набором данных): | |
БД | |
Для работы тестов требуется база данных с актуальной схемой, а также должна быть добавлена функция getAppTestDatabaseConfig() в конфиг dynamic.config с данными для подключениями с ним. | |
Откуда ей браться и как мы автоматизируем запуск тестов - это нужно решить. Вероятно, каким-то скриптом должна актуализироваться. | |
Настройка окружения для тестов | |
ActiveRecord создана по принципу "db first", поэтому отвязаться от БД очень сложно. | |
Значит: | |
0. Выполняем команду ./vendor/bin/codecept bootstrap | |
1. Создаём тестовую БД с актуальной структурой таблиц | |
2. Добавляем в dynamic.php новые доступы к этой БД | |
3. Создаём конфиг test.php на основе console.php, но с доступами из п.2 | |
4. Прописываем этот конфиг в codeception.yml | |
Теперь можно тестировать AR-сущности и т.п. | |
Тесты кладём в директорию ./tests/unit/, воссоздав там структуру vigbo-cms. | |
Запуск: | |
vendor/bin/codecept run | |
Может понадобиться тестовый набор данных в БД, тут 2 варианта: | |
1. Доверить это codeception'у, дав ему: дамп, dsn+доступы к БД | |
2. Доверить это Yii2, у которого доступы уже есть, но нет дампа | |
2.1 Создать миграции с нужными данными | |
2.2 Сгенерировать эти данные | |
Я пошёл по пути 2.2, а значит нам нужны фикстуры, т.е. тестовые наборы данных. | |
Их можно создать самому, а можно сгенерировать. Создавать самому лениво. | |
Поэтому берём Faker. Поехали: | |
0. Добавляем в ./tests/unit.suite.yml part "fixtures" | |
1. Выполняем на всякий случай команду vendor/bin/codecept build | |
2. Создаём директорию ./tests/fixtures/, а в ней ещё data/ и templates/ | |
3. В конфиг test.php дописываем альяс @tests и controllerMap fixture с путями | |
4. В ./tests/fixtures/ создаём классы фикстур и их шаблоны на основе Faker'а | |
5. Создаём рядом с yii скрипт yii_test, который будет отличаться конфигом - test.php | |
6. Генерируем фикстуры: yii_test fixture/generate-all --interactive=0 --count=100 | |
Готово, теперь при запуске тестов в БД будут записываться сгенерированные данные. | |
Опцией clean в codeception.yml можно попросить очищать их потом за собой. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment