Тестирование с PHPUnit и Codeception в Yii2
Самая объёмная тема среди предложенных завершена. Выкладываю исправленную и дополненную запись вебинара-скринкаста о тестировании c PHPUnit и Codeception. Добавлены и доработаны примеры кода, пункты про аннотации, фикстуры, анализ покрытия, Faker, про установку всего через composer и другие нюансы:
Открыть на YouTube
Коды примеров
Код проекта с тестами
Статья про запуск в проекте
Статья про применение моков и TDD
Ещё в тему доклад по обновлённым тестам в Yii2:
Структура вебинара-скринкаста (кликабельно):
Кто ещё не подписался на остальные вебинары, тот сам себе Буратино:
И задавайте вопросы в комментариях. Заранее спасибо и до встречи в эфире!
Огромное спасибо за проделанный труд! )
Огромная работа!!! Смотрю пока оригинал, очень ценная информация. Спасибо большое! Задонатил.
Скажите в чем делали mindmap о тестировании. Спасибо
В XMind.
Спасибо огромное, все руки не доходили до тестирования :)
Спасибо за видео. Давно хотел изучить вопрос тестирования.
Написал в консоли:
composer global require "phpunit/phpunit:~4.8"
Но в итоге почему-то устанавливается: PHPUnit 3.7.21 by Sebastian Bergmann.
В чем может быть проблема?
Возможно, что ставили что-то в global раньше.
Ставил только composer global require "fxp/composer-asset-plugin:~1.0.3"
Это phpunit вместе с xampp (или другим сервером локальным) установлен из pear
Очень полезная информация, собранная мастером и занесена в самое ядро мозга.
Вдохновлен и впечатлен.
Спасибо!
Добрый день.
Такая проблема возникает:
Установил глобально Specify и Verify, сейчас эти компоненты лежат в папке vendor глубоко на диске "С", сайт же у меня развернут на другом диске, при попытке запустить тест "codecept run unit SomeTest" в консоль вываливается ошибка: "Call to undefined function expect()". Я добавил в Include Path в шторме путь к vendor на диске C, IDE начала подсвечивать пути к подключаемым файлам, шторм распознает путь "\Codeception\Specify" но вылетает ошибка при выполнении.
Потому вопрос: я должен эти компоненты устанавливать в папку vendor в которой находятся компоненты сайта? То есть, чтобы использовать Specify я должен еще установить 10МБ зависимостей?
Спасибо!
Ну если не получится разобраться, то можно установить всё себе в require-dev. А на продакшене устанавливайте composer install --no-dev, чтобы их туда не подтягивать.
Спасибо за подсказку Установил компоненты в секцию require-dev. Теперь все работает.
Спасибо Дмитрий. Вы действительно профи.
Хотелось бы спросить не по теме. Будет ли обзор или статья про кэширование в Yii2?
Отличный вебинар, вы только разбивайте следующий раз на логические части, а то 6 часов через чур
Огромное спасибо за те знания, которыми Вы делитесь, Дмитрий. Это бесценно.
У меня вопрос: я пробовал делать тест модели с поведением Timestamp и модель не заполнялась. Т.е. поведения не работают в тестах?
И еще интересно - как добиться в консоли такого же вывода codeception как у Вас? У меня наполовину из такого: ←[1mUnit Tests (1) ←[22m---. Пробовал другие моноширинные шрифты - безуспешно. Кодировка проекта UTF-8.
Поведение работает и в тестах по $model->save().
А лишние символы - это спецсимволы указания цвета. Для отключения вписывайте run --no-colors.
Но хотелось бы видеть в цвете! У меня Win7, PphStorm9. Как это сделать? В консоли были сообщения про установку значений always, never, auto ( Argument #3 (No Value) of PHPUnit_TextUI_ResultPrinter::__construct() must be a value from "never", "auto" or "always"). Если в codeception.yml в setting/colors выставить одно из этих значений, то появляются эти спецсимволы, а если выставить true или false то выходит ошибка. Можно как-то сделать это в цвете?
Забыл добавить, что с --no-colors выходит ошибка: Argument #3 (No Value) of PHPUnit_TextUI_ResultPrinter::__construct() must be a value from "never", "auto" or "always"
Это для Codeception:
А так это просто в PHPStorm отбычная консоль цветная, а тестовая - чёрно-белая. Я на Windows раньше ставил эмулятор линуксового терминала Cygwin, и он как раз цветным был.
Дмитрий, спасибо большое за видео!
По поводу цветной консоли в шторме можно подробнее? У меня никак не хочет отображать цвета. В настройках есть цвета (в примере), а в самой консоли весь вывод одного цвета... не очень читабельно. Win 8 + PhpStorm 10.
Поставил ConEmu, там все ок. Пробовал заменить консоль шторма на ConEmu, но оно открывается отдельно, не очень удобно. Хотелось бы именно встроенную в шторм консоль сделать нормальной на винде.
И что Вы имели в виду под "обычная консоль" и "тестовая консоль"?
Обычная - которая во вкладке "Terminal" и в которой мы команды пишем, тестовая - в которой результаты тестов выводятся при запуске кнопкой "Run".
У меня и в той и в другой весь вывод одним цветом :(
Windows уже три года не пользуюсь. Так что запускайте в своей цветной ConEmu или терпите так :)
да спасибо большое, а то думал вы общественную деятельность забросили. буду знакомится на выходных.
а следующий вебинар не хотите посвятить теме, правильного написания кода для высоких нагрузок, что то типа лучшие практики корифеев на yii2 ?
За эту тему не так много было голосов. А так это общие принципы, касаемые любого языка в общем и PHP с Yii2 в частности.
А планируется ли еще какой-либо вебинар и на какую тему?
Да, планирую.
Вопрос один. Если вебинар посвящен тестам ЗАЧЕМ обьяснять как работать с Yii? Как создавать приложение, как работать с моделями. Вам не кажется это выходит за рамки?
Открою Вам страшную тайну: там есть перемотка клавишами влево-вправо.
Я это понимаю, но зачем рассказывать то, что не относится к теме?
А вот мне нужно, чтобы вот так вот разжевывали. А Вы можете перемотать или поставить ускоренное воспроизведение.
А видели структуру тестов yii2/app-advanced? я пока досмотрел до 1:24 и не знаю занимались ли вы этим вопросом в видео (7 часов таки почти). Но полез я туда и понял, что надолго там засяду, прежде чем смогу начать полноценно работать с тестами в проекте.
Видел. Там разложено по подпапкам common, backend и frontend. В видео об этом нету.
Спасибо за урок. Не могли бы Вы сделать текстовую версию данного урока? Т.к. смотреть все 6 часов не всегда у всех есть возможность. Да и текст на телефоне можно прочитать. Заранее спасибо.
Если есть желание, то можете под диктовку транскрибировать из речи в текст. Мы Вам дружно скажем спасибо :)
Если слово в слово и без исходного кода, то здесь выйдет примерно 100 вордовских страниц. Потом можно будет расставить листинги из репозитория. Думаю, что с вычиткой и речевыми правками успеете сделать всего за 70 часов.
Можно поменьше воды, побольше дела.
Можно. Разрешаю.
Отличный материал, Дмитрий, спасибо большое.
Здравствуйте. Судя по отладке кода FixtureHelper при использовании в acceptance тестах не получится задавать различные фикстуры для различных cept. Например 2 фикстуры для LoginCept, и 5 фикстур для UserCept. Как решить эту проблему на ваш взгляд?
Да, менять не получится. И между тестами они не перезагружаются. Просто добавляем все 7 пользователей в общую фикстуру и прогоняем разные тесты по ним.
спасибо!
видео на 3:51:00 о статических переменных - статические переменные не перезаписываются при создании класса. Не вводите в заблуждение незнающих.
Все методы в этих объектах будут это поле менять, как статическое Yii::$app перезаписывается при создании new Application. Там перезапись производится именно в конструкторе Application.
ок, сорри, не допоняли друг друга ;)
Спасибо ещё раз за видео.
Хочу предложить небольшую помощь тем, кто смотрит всё это и пересматривает отдельные части - можно на youtube в описании добавить таймкоды. Я об этом немного поздно задумался, но пока вот, что набросал:
Может немного кривые комментарии, но всё равно это очень поможет многим. Мне даже самому уже удобно.
Постараюсь чуть позже скинуть ещё коды остального времени, ну или может ещё кто-то поможет.
Странно, сделал все по образу и подобию, а в итоге в консоль все равно валит html верстку
Блин все повторял до 27 минуты. И вылезла ошибка
Дякую за гарний матеріал, причому не перший! Спочатку теж думав. що багато розжовується, але в цьому матеріалі стільки інформації для тих, хто не мав справу із тестуванням взагалі (як я), що за один раз все важко сприйняти та розжовування не зайві! Товариш підказав - можна ставити швидкість відтворення відео, наприклад 1,25 або 1,5) Ще раз дякую!
Ід прописав, ніби все перевірив, але така сама помилка -
Ось архів, якщо не важко гляньте в чому причина:
http://www.ex.ua/400575346514
Дякую)
в тому то і річ - там прописано)
І тест ніби запускається, але потім помилку пише:
http://prntscr.com/cldhrp
http://prntscr.com/cldinx
Розібрався) потрібно уважно імпортувати класи. В моєму випадку в класі Тесту потрібно було:
use tests\codeception\backend\unit\DbTestCase;
замість
use yii\codeception\DbTestCase;
Дякую Дмитру, ще раз, за гарний матеріал.
Поборов Unit тести. Тепер питання по функціональним)
LoginCept.php:
Результат:
В чому може бути проблема?
Дякую)
Помогите, выполнял все по видео и столкнулся с проблемой после установки PHPUnit, запускаю тест - вылетает ошибка:
что я сделал не так? :(
В правиле валидации [..., 'match', 'pattern' => '...'] ключ 'pattern' забыли.
Блин, мелочь такая, из-за невнимательности всю голову сломал.
Здравствуйте, отличный вебинар, то что надо.
У меня возникла небольшая проблема, при запуске команды phpunit --coverage-html ./report
у меня выводится ошибка - No whitelist is configured, no code coverage will be generated.
И понять что он хочет я немогу. Подскажите пожалуйста что я не так делаю.
Пропишите whitelist вместо blacklist.
Здравствуйте! Подскажите пожалуйста, как быть если сайт на виртуалке, но мне нужно запускать selenium-server не на виртуалке, а на самом компьютере?
Т.е. чтобы браузер запускался на компьютере, а код находится на виртуальной машине.
Здравствуйте, Дмитрий!
Не могу запустить тесты с момента после установки PHPUnit, у вас класс наследуется от PHPUnit_Framework_TestCase но такого не находит у меня (устанавливал как глобально, так и в проект), помогает только так: PHPUnit\Framework\TestCase.
Не совсем понимаю почему так.
Работабю из OpenServer, уже подумываю на vagrant перейти, может из ubuntu будет работать, но не уверен, что это поможет, думаю что чего-то не хватает, что бы был такой класс PHPUnit_Framework_TestCase
> Не совсем понимаю почему так.
В феврале вышел PHPUnit 6.0, где PHPUnit_Framework_TestCase переделали в PHPUnit\Framework\TestCase. Это нормально.
Да, я уже понял, у меня в зависимостях что-то не так было, не поставилась версия из видеоурока, потому поставил 6ю. Спасибо за ответ.
Нужна помощь, помоги плз. Прошел вебинар, инетересовало unit-тестирование. Все вродебы получилось, все стало понятно. Пытаюсь теперь запустить юнит тесты на своем проекте, advanced шаблон. Сгенерировал codeception тесты, прописал бутстрап настройки, как в уроке. Для проверки взял из урока EmailValidatorTest и не завелось. При запуске тестов пишет [Error] Class 'Yii' not found
Гуглил, не особо помогло, из того, что я нашел по советам, так это то, что надо подключать автолоад и сам Yii.php, но в бутрстрап он у меня подключен, как и в бутстрапе из урока, пути указаны правильно, помоги плз, если есть мыли, что может быть
вопрос снимаю предыдущий. я починил. но не совсем понимаю, почему так. В _bootstrap.php есть строка: Yii::setAlias('@tests', dirname(__DIR__).'/tests'); Вот именно из-за нее ругалось. Не пойму почему...
Я парился много времени с тестами, гуглил и прочее, потом спросил у знакомого, который их делал и говорит что тоже пытался долго просто стандартные запустить и ничего не выходило, а на линуксе летает, так вот хотелось спросить почему на винде не получается запустить? Ошибку точно не помню, но может известно почему, может что-то включить нужно или поставить расширение какое? Если нужно, могу скинуть ошибку, с чем работаю и что сделал для запуска?
Это не срочно или обязательно, а просто интересно, да и для других может будет полезно) Потому что я гуглил опять же этот вопрос, по поводу того, чего же на винде не запускаются, а на линуксе работает норм и ничего не нашел, никаких объяснений и прочей инфы.
Проблемы с переходом на линукс нет, или поднять сервер под виртуальной машиной, Vagrant'ом, но все же интересно что такое с виндой и в чем у нее проблема?
> Ошибку точно не помню
Оттуда и надо копать.
Уже решил проблему, на OpenServer 5.2.2, PHP7, раньше просто ставил не те расширения которые нужно было (точнее не те версии), в итоге в composer.json (для глобальных расширений) вот такой код выходит:
Пока смотрел набросал по темам еще материала
https://github.com/kopyrin/doc-codeception
Спасибо огромное. Но я был бы не я если бы не возникало вопросов. Остановился на 3:17:39 в чем запара
вот модель
вот тест
набираю в терминале
codecept unit run
получаю
и пока не просмотрел все, вы таблица со внешними ключами рассматриваете?
Переименуйте validationTest в testValidation.
Да спасибо огромное очень важное замечание.
Дмитрий, добрый день. При запуске unit тестов codeception не находит класс User. Не подскажете где мне искать ошибку?
Проверить bootstrap.php файлы.
Спасибо. Не заметил.