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"
Примечания по обновлению:
- Выполните команду "build"
- Замените модуль Selenium2 на WebDriver
- Проверьте, что нигде не используете PHPBrowser->session (это выпилено вместе с Mink)
- CodeCoverage требует новой версии C3
Пора тестировать!