Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
yii:yii2:codeception [2021/01/12 10:37] werwolf |
yii:yii2:codeception [2023/01/12 12:18] (текущий) |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | =====Codeception===== | ||
| + | В Yii2 используется Codeception как framework для тестирования.\\ | ||
| + | \\ | ||
| + | Codeception — это отдельный проект, не зависящий от Yii2, который используется во многих современных framework’ах (Symfony, Laravel и др.). И конечно же, вы можете установить Codeception используя Composer.\\ | ||
| + | ====Настройка==== | ||
| + | |||
| + | кооманда на формитрование папки с настроками codeception: | ||
| + | <code> | ||
| + | cd api | ||
| + | php vendor/bin/codecept bootstrap --namespace api | ||
| + | </code> | ||
| + | |||
| + | такая структура должна получиться | ||
| + | {{ :yii:yii2:screenshot_1.png |}} | ||
| + | |||
| + | Настройка api/tests/unit/_bootstrap.php: | ||
| + | |||
| + | <code php> | ||
| + | <?php | ||
| + | // Here you can initialize variables that will be available to your tests | ||
| + | defined('YII_DEBUG') or define('YII_DEBUG', true); | ||
| + | defined('YII_ENV') or define('YII_ENV', 'dev'); | ||
| + | |||
| + | require __DIR__ . '/../../../vendor/autoload.php'; | ||
| + | require __DIR__ . '/../../../vendor/yiisoft/yii2/Yii.php'; | ||
| + | require __DIR__ . '/../../../common/config/bootstrap.php'; | ||
| + | require __DIR__ . '/../../config/bootstrap.php'; | ||
| + | |||
| + | $config = require __DIR__ . '/../../config/codeception-local.php'; | ||
| + | |||
| + | $app = new yii\console\Application($config); | ||
| + | |||
| + | </code> | ||
| + | |||
| + | Создаем файлик настроек приложения api/config/codeception-local.php | ||
| + | |||
| + | настройки скопировал из main.php, кроме | ||
| + | <code> | ||
| + | 'errorHandler' => [ | ||
| + | 'errorAction' => 'site/error', | ||
| + | ],) | ||
| + | </code> | ||
| + | |||
| + | настройка тестовой базы: | ||
| + | добавил в api/config/codeception-local.php: | ||
| + | |||
| + | <code> | ||
| + | 'db' => [ | ||
| + | 'class' => 'yii\db\Connection', | ||
| + | 'dsn' => 'mysql:host=db;dbname=tests', | ||
| + | 'username' => 'root', | ||
| + | 'password' => '2619192', | ||
| + | 'charset' => 'utf8', | ||
| + | ], | ||
| + | </code> | ||
| + | |||
| + | ====Структура тестов, папка tests и её содержимое==== | ||
| + | |||
| + | Для написания тестов, существует специальная папка test.\\ | ||
| + | \\ | ||
| + | Если вы в неё зайдет, то увидите следующую структуру: | ||
| + | |||
| + | <code> | ||
| + | _data | ||
| + | _output | ||
| + | _support | ||
| + | acceptance | ||
| + | bin | ||
| + | functional | ||
| + | unit | ||
| + | _bootstrap.php | ||
| + | acceptance.suite.yml.example | ||
| + | functional.suite.yml | ||
| + | unit.suite.yml | ||
| + | </code> | ||
| + | |||
| + | |||
| + | |||
| + | * **_data** — это папка, в которой хранятся PHP файлы возвращающие массив данных (например, автомобили) для использования в fixtures. | ||
| + | * **fixtures** класс по типу ActiveRecord, который перед запуском теста, добавляет данные из файла, в заранее указанную таблицу из ActiveRecord основного класса (используя параметр $modelClass , например, fixtures/Car.php, будет ниже в примере). После того как тест будет завершен, все данные из этой таблицы будут удалены. И так процесс будет повторяться. | ||
| + | * **_output** — это папка, в которой выводится результат запуска функциональных тестов. Выглядят они как исходный код HTML странички. Например, если вы зайдете на страницу и посмотрите на неё с помощью инспектора кода, в этом случае вы увидите тоже самое. | ||
| + | * **_support** — это сгенерированные модули, которые нужны для запуска тестов. Они создаются с помощью команды (vendor/bin/codecept build tests/) | ||
| + | * **bin** — это папка, в которой находится бинарный файл (yii), на подобии того, что лежит в корне, только этот именно для запуска процессов в тестовом режиме. | ||
| + | * **acceptance** — это папка, в которой находятся файлы со сценарием со стороны пользователя, эмулируя поведение браузера | ||
| + | * **functional** — это папка, в которой находятся файлы со сценарием со стороны пользователя, эмулируя поведение браузера | ||
| + | * **unit** — этот папка с файлами, в которых проверяются классы или часть кода на то, что он/они работает по определенному сценарию или без сценария | ||
| + | |||
| + | ====Запуск тестов==== | ||
| + | |||
| + | В Yii2 по умолчанию присутствуют некоторые тесты запустить тест и чтобы их запустить — используйте команду ниже: | ||
| + | <code> | ||
| + | /var/www/advanced/api# ../vendor/bin/codecept run | ||
| + | </code> | ||
| + | |||
| + | Если у вас выдает следующую ошибку: | ||
| + | <code> | ||
| + | [yii\base\InvalidConfigException] Either GD PHP extension with FreeType support or ImageMagick PHP extension with PNG support is required. | ||
| + | </code> | ||
| + | |||
| + | Тогда её можно исправить установив ''php-gd'' расширение: | ||
| + | |||
| + | * Для php 5.5+: ''$ sudo apt-get install php5-gd'' | ||
| + | * Для php 7+: ''$ sudo apt-get install php7.0-gd'' | ||
| + | |||
| + | И теперь снова попробуйте запустить тесты, у вас должно вывестись что-то похожее на это: | ||
| + | |||
| + | <code> | ||
| + | Api.unit Tests (22) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
| + | ✔ ModelsBehaviorTest: Before delete | #0 (0.03s) | ||
| + | ✔ ModelsBehaviorTest: Before delete | #1 (0.02s) | ||
| + | ✔ ModelsBehaviorTest: Before delete | #2 (0.02s) | ||
| + | ✖ ModelsBehaviorTest: Before delete | #3 (0.02s) | ||
| + | ✔ ModelsBehaviorTest: Before delete | #4 (0.02s) | ||
| + | ✔ ModelsBehaviorTest: Before delete | #5 (0.02s) | ||
| + | ✔ ModelsBehaviorTest: Before delete | #6 (0.06s) | ||
| + | ✔ ModelsBehaviorTest: Before delete | #7 (0.02s) | ||
| + | ✖ ModelsBehaviorTest: Before delete | #8 (0.02s) | ||
| + | ✔ ModelsBehaviorTest: Before delete | #9 (0.14s) | ||
| + | ✔ ModelsBehaviorTest: After soft delete (0.00s) | ||
| + | ✔ ModelsBehaviorTest: Events (0.00s) | ||
| + | ✔ ModelsBehaviorTest: Before soft delete (0.00s) | ||
| + | ✔ CommentTest: Get comments | #0 (0.06s) | ||
| + | ✔ CommentTest: Get comments | #1 (0.04s) | ||
| + | ✔ CommentTest: Get comments | #2 (0.03s) | ||
| + | ✔ CommentTest: Get comments | #3 (0.03s) | ||
| + | ✔ CommentTest: Get comments | #4 (0.03s) | ||
| + | ✔ CommentTest: Get comments | #5 (0.03s) | ||
| + | ✔ CommentTest: Send new comment (0.00s) | ||
| + | ✔ CommentTest: Set comment (0.00s) | ||
| + | ✔ CommentTest: Behaviors (0.00s) | ||
| + | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
| + | 2x DEPRECATION: Calling the "Symfony\Component\EventDispatcher\EventDispatcherInterface::dispatch()" method with the event name as the first argument is deprecated since Symfony 4.3, pass it as the second argument and provide the event object as the first argument instead. /var/www/advanced/vendor/symfony/event-dispatcher/EventDispatcher.php:58 | ||
| + | |||
| + | Time: 800 ms, Memory: 92.49 MB | ||
| + | |||
| + | There were 2 failures: | ||
| + | |||
| + | --------- | ||
| + | 1) ModelsBehaviorTest: Before delete | #3 | ||
| + | Test tests/unit/components/ModelsBehaviorTest.php:testBeforeDelete | ||
| + | В классе \modules\dir\models\CurrencyCourses не найдено поле isdeleted, проверка методом canGetProperty | ||
| + | Failed asserting that false is true. | ||
| + | #1 /var/www/advanced/api/tests/unit/components/ModelsBehaviorTest.php:31 | ||
| + | |||
| + | --------- | ||
| + | 2) ModelsBehaviorTest: Before delete | #8 | ||
| + | Test tests/unit/components/ModelsBehaviorTest.php:testBeforeDelete | ||
| + | В классе \modules\promo\models\basePromotionTag не найдено поле isdeleted, проверка методом canGetProperty | ||
| + | Failed asserting that false is true. | ||
| + | #1 /var/www/advanced/api/tests/unit/components/ModelsBehaviorTest.php:31 | ||
| + | |||
| + | FAILURES! | ||
| + | Tests: 22, Assertions: 85, Failures: 2. | ||
| + | |||
| + | </code> | ||