Codeception 1.6.1: Laravel and Groups

Published on May 08, 2013

That was about a month of hard work on Codeception 1.6.1. Probably the hardest part was to provide more open architecture for testing framework. Right now it’s hard to customize anything in Codeception. We are going to fix that soon with new event system. We are going to release Extension (for hooking all the events) and Group classes (for events related to groups) in next release.

Hey, did you mention groups?

Yep, you are right! From now on you can use group tests and execute them separately. You have a few ways to add test to a group. If it is a Cept scenario all of this methods will work.

<?php
$scenario->group('admin');
$scenario->group(array('admin','critical'));
$scenario->groups(array('admin','critical'));

$I = new WebGuy($scenario);
// ...
?>

For Cest and Test files you can use @group annotiation similarly as in PHPUnit:

<?php
 /**
  * @group model
  */ 
  public function testAdminIsCreated()
  {
    // test goes here
  }

?>

To execute tests of one group use:

php codecept.phar run -g admin
php codecept.phar run --group admin

To execute tests of several groups just pass multiple group options to runner.

Functional Tests in Classes

As you know, we deprecated Cest format for unit testing and we propose you to use it for functional and acceptance tests. It should work well for you now. Soon we will publish a tutorial and guide for how to to this. Basically you can generate a Cest file:

php codecept.phar generate:cest acceptance MyCest

And write tests inside a newly created MyCest class.

<?php
class MyCest 
{
  public function loginPage(\WebGuy $I)
  {
    $I->amOnPage('/login');
    $I->see('Login', 'h1');
    $this->checkCopyrightIncluded($I);
  }

  public function registrationPage(\WebGuy $I)
  {
    $I->amOnPage('/register');
    $I->see('Register', 'h1');
    $this->checkCopyrightIncluded($I);
  }  

  protected function checkCopyrightIncluded($I)
  {
    $I->see('(c) 2013', '#footer');
  }
}
?>

All public methods of Cest classes become tests. You can use private and prected methods and properties to share data and functionality over the tests. Also you can use setup/teardown preperations in _before and _after methods. If you want to make a bunch of simple tests and you don’t want to create a file for each - Cest is your choice. More docs on it coming.

Good news to Laravel fans

Yes, yes. Finally we’ve got a module for Laravel4 framework functional testing. We couldn’t test it well, as there are not to much Laravel4 apps available on GitHub. But we run some basic tests on a CRUD app, and it worked nicely. Thanks to HttpFoundation component inside Laravel4 framework.

Larvael module is zero configuration. You should just bootstrap a project in your Laravel app directory and include Laravel4 module into your functional test suite.

Take a look into sample Laravel project prepared my Jeffrey Way and Michael Bodnarchuk with sample test included.

Various changes and fixes.

  • added seeOptionIsSelected methods for all modules that share FrameworkInterface.
  • added resizeWindow method to Selenium2 module (thanks to Jaik Dean)
  • Codeception is PHP 5.5 compatible. We learned that by launching tests on Travis (thanks to Tiger-Seo)
  • fix for screenshots snapshot filenames in Cest files
  • fix to getStatusCode method in frameworks tests

Update

redownload your codeception.phar for update:

wget http://codeception.com/codecept.phar -O codecept.phar

for composer version

$ php composer.phar update