Codeception: не только про парней!
До версии 2.0 в Codeception можно было создавать только своих парней (Guys). Это же нечестно! Codeception должен быть инструментом для всех: для парней, для барышень, для ниндзей и даже для человека-паука (тебе придется ждать выхода Codeption 3.0) Именно поэтому теперь при инициализации проекта можно выбрать "действующее лицо" (actor), которое будет делать всю тяжелую работу - тестировать наш код!
Before proceed you can choose default actor:
$I = new [ACTOR] Select an actor. Default: Guy [0] Guy [1] Girl [2] Person [3] Engineer [4] Ninja [5] Dev [6] SpiderMan
После этого все наши "актеры" будут доступны как: WebNinja, CodeGirl, TestSpederMan (начиная с 3.0)
Codeception: не кушайте в одиночестве!
До версии 2.0 "парни" (теперь "актеры") могли рассчитывать только на себя - мужики! Вы могли это заметить, так как во всех тестах был только один одинешенька $I, словно полярник на северном полюсе. Теперь все иначе! У полярника может быть подруга и ему не будет так скучно! Давайте посмотрим:
<?php $I = new WebGuy($scenario); $nick = $I->haveFriend('nick'); ?>
Теперь мы можем писать много-пользовательские (сессионные) тесты, которые могу выполняться в разных (!) браузерах. Давайте немного за DDOS-им github посмотрим как это работает:
<?php $I = new WebGuy($scenario); $I->wantTo('surf Github with Nick'); $I->amOnPage('/'); $I->submitForm('#top_search_form', array('q' => 'php-webdriver')); $nick = $I->haveFriend('nick'); $nick->does(function(WebGuy $I) { $I->amOnPage('/Codeception/Codeception'); $I->click('Issues'); $I->canSeeInTitle('Issues'); }); $I->click('li.public:nth-child(1) > h3:nth-child(3) > a:nth-child(1) > em:nth-child(2)'); $I->seeInTitle("php-webdriver"); $nick->does(function(WebGuy $I) { $I->click('Milestones'); $I->canSeeInTitle('Milestones'); }); $I->seeCurrentUrlEquals('/facebook/php-webdriver'); $I->click('Issues'); $I->canSeeInTitle('Issues'); ?>
Как вы уже заметили, все, что выполняется в методе "does" (closure) - выполняется в отдельной сессии! Это значит, что вы можете тестировать взаимодействие пользователей на вашем сайте! Например, человек-паук пишет личное сообщение супер-мэну, а тот ему отвечает. Аналогично можно тестировать REST API.
Важные изменения
Основной задачей Codeception 2.0 было проведение внутреннего рефакторинга.
Mink и его драйверы окончательно удалены. Вместо них вы можете использовать модуль WebDriver для Selenium-тестов и PhpBrpwser (Goutte) для эмуляции браузера. PhpBrowser теперь гораздо лучше работает с модулями для различных фреймворков. Если раньше вы использовали модули Silenium или Silenium2 - теперь вам необходимо перейти на WebDriver, PhpBrowser работает по-прежнему, никаких дополнительных действий не требуется.
Больше нет двойного прогона тестов! Теперь тесты, как и самый обычный PHP-код, выполняются только один раз. С этого момента вы можете использовать произвольный PHP-код в своих тестах, например вот так:
<?php $card = $I->grabTextFrom('#credit_card') var_dump($card); // was showing `Maybe` instead of real value ?>
Codeception 2.0 требует PHP 5.4 и выше
Время идет, пора обновляться и очень хочется короткого синтаксиса для массивов +)
Классы "актеров" теперь пересобираются автоматически!
Иихха! Помните как вы добавили новый модуль в конфиг и 30 минут дебажили ошибку "method not found" !? Забудьте!
Добавлен модуль Assert.
Модуль позволяет использовать базовыe asserts в тестах. Теперь можно использовать "seeEquals" и "seeContains" в Cest и Cept-тестах
Модуль Silex.
Ждем ваши предложения и хотелки!
Минорные внутренние изменения.
Троектратное "Рефакторинг"! Перешли на PSR-2, переписали CodeCoverage, улучшили структуру каталогов. Внутренности Codeception стали более понятны и просты (за исключением кусков, использующих внутренности PHPUnit)
Обновление
Просто скачайте новую сборку: wget http://codeception.com/releases/2.0.0-alpha/codecept.phar
Или через Composer: composer require --dev "codeception/codeception:2.0.0-alpha"
Примечания по обновлению:
Пора тестировать!