Блог

Codeception 2.0 alpha

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"

Примечания по обновлению:

  1. Выполните команду "build"
  2. Замените модуль Selenium2 на WebDriver
  3. Проверьте, что нигде не используете PHPBrowser->session (это выпилено вместе с Mink)
  4. CodeCoverage требует новой версии C3

Пора тестировать!