Инструменты пользователя

Инструменты сайта


yii:yii2:codeception

Это старая версия документа!


Codeception

В Yii2 используется Codeception как framework для тестирования.

Codeception — это отдельный проект, не зависящий от Yii2, который используется во многих современных framework’ах (Symfony, Laravel и др.). И конечно же, вы можете установить Codeception используя Composer.

Настройка

кооманда на формитрование папки с настроками codeception:

 cd api
 php vendor/bin/codecept bootstrap --namespace api 

такая структура должна получиться

Настройка api/tests/unit/_bootstrap.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);

Создаем файлик настроек приложения api/config/codeception-local.php

настройки скопировал из main.php, кроме

'errorHandler' => [
            'errorAction' => 'site/error',
        ],) 

настройка тестовой базы: добавил в api/config/codeception-local.php:

       'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=db;dbname=tests',
            'username' => 'root',
            'password' => '2619192',
            'charset' => 'utf8',
        ],

Структура тестов, папка tests и её содержимое

Для написания тестов, существует специальная папка test.

Если вы в неё зайдет, то увидите следующую структуру:

_data
_output 
_support 
acceptance 
bin
functional 
unit
_bootstrap.php
acceptance.suite.yml.example
functional.suite.yml
unit.suite.yml
  • _data — это папка, в которой хранятся PHP файлы возвращающие массив данных (например, автомобили) для использования в fixtures.
  • fixtures класс по типу ActiveRecord, который перед запуском теста, добавляет данные из файла, в заранее указанную таблицу из ActiveRecord основного класса (используя параметр $modelClass , например, fixtures/Car.php, будет ниже в примере). После того как тест будет завершен, все данные из этой таблицы будут удалены. И так процесс будет повторяться.
  • _output — это папка, в которой выводится результат запуска функциональных тестов. Выглядят они как исходный код HTML странички. Например, если вы зайдете на страницу и посмотрите на неё с помощью инспектора кода, в этом случае вы увидите тоже самое.
  • _support — это сгенерированные модули, которые нужны для запуска тестов. Они создаются с помощью команды (vendor/bin/codecept build tests/)
  • bin — это папка, в которой находится бинарный файл (yii), на подобии того, что лежит в корне, только этот именно для запуска процессов в тестовом режиме.
  • acceptance — это папка, в которой находятся файлы со сценарием со стороны пользователя, эмулируя поведение браузера
  • functional — это папка, в которой находятся файлы со сценарием со стороны пользователя, эмулируя поведение браузера
  • unit — этот папка с файлами, в которых проверяются классы или часть кода на то, что он/они работает по определенному сценарию или без сценария

Запуск тестов

В Yii2 по умолчанию присутствуют некоторые тесты запустить тест и чтобы их запустить — используйте команду ниже:

/var/www/advanced/api# ../vendor/bin/codecept run

Если у вас выдает следующую ошибку:

[yii\base\InvalidConfigException] Either GD PHP extension with FreeType support or ImageMagick PHP extension with PNG support is required.

Тогда её можно исправить установив php-gd расширение:

  • Для php 5.5+: $ sudo apt-get install php5-gd
  • Для php 7+: $ sudo apt-get install php7.0-gd

И теперь снова попробуйте запустить тесты, у вас должно вывестись что-то похожее на это:

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.
yii/yii2/codeception.1610437357.txt.gz · Последние изменения: 2023/01/12 12:16 (внешнее изменение)