| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
⚠️ This repository is archived and is no longer maintained.
A codeception module to test your CakePHP 3 powered application. Using Codeception with CakePHP opens up a whole new set of testing capabilities.
(i.e. browser-based workflow tests)
(i.e. direct, internal method tests)
From a CakePHP application, run the following from the command-line:
$ composer require --dev cakephp/codeception:dev-master && composer run-script post-install-cmdIf you are developing a plugin, add the post-install script to your composer.json first:
{
"scripts": {
"post-install-cmd": "Cake\\Codeception\\Console\\Installer::customizeCodeceptionBinary"
}
}Once installed, you can now run bootstrap which will create all the codeception required files in your application:
$ vendor/bin/codecept bootstrapThis creates the following files/folders in your app directory:
├── codeception.yml ├── src │ └── TestSuite │ └── Codeception | ├── AcceptanceTester.php | ├── FunctionalTester.php | ├── UnitTester.php | ├── Helper │ │ ├── Acceptance.php │ │ ├── Functional.php │ │ └── Unit.php | └── _generated | └── .gitignore └── tests ├── Acceptance.suite.yml ├── Functional.suite.yml ├── Unit.suite.yml ├── Acceptance │ └── bootstrap.php ├── Fixture │ └── dump.sql ├── Functional │ └── bootstrap.php └── Unit └── bootstrap.php
As you might have noticed, the CakePHP implementation differs in a couple things:
To better understand how Codeception tests work, please check the official documentation.
<?php
$I = new FunctionalTester($scenario);
$I->wantTo('ensure that adding a bookmark works');
$I->amOnPage('/bookmarks/add');
$I->see('Submit');
$I->submitForm('#add', [
'title' => 'First bookmark',
]);
$I->seeInSession([
'Flash'
]);...
$I->seeInConfig('App.name'); // checks only that the key exists
$I->seeInConfig('App.name', 'CakePHP');
$I->seeInConfig(['App.name' => 'CakePHP']);$I->dontSeeInConfig('App.name'); // checks only that the key does not exist
$I->dontSeeInConfig('App.name', 'CakePHP');
$I->dontSeeInConfig(['App.name' => 'CakePHP']);This is useful when you need a record for just one test (temporary fixture). It does not assert anything and returns the inserted record's ID.
$I->haveRecord('users', ['email' => 'jadb@cakephp.org', 'username' => 'jadb']);This is a wrapper around the Cake\ORM\Table::find('first') method.
$I->grabRecord('users', ['id' => '1']);This checks that the requested record does exist in the database.
$I->seeRecord('users', ['username' => 'jadb']);This checks that the request record does not exist in the database.
$I->dontSeeRecord('users', ['email' => 'jadb@cakephp.org']);...
In your Cest test case, write $fixutures property:
class AwesomeCest
{
public $fixtures = [
'app.users',
'app.posts',
];
// ...
}You can use $autoFixtures, $dropTables property, and loadFixtures() method:
class AwesomeCest
{
public $autoFixtures = false;
public $dropTables = false;
public $fixtures = [
'app.users',
'app.posts',
];
public function tryYourSenario($I)
{
// load fixtures manually
$I->loadFixtures('Users', 'Posts');
// or load all fixtures
$I->loadFixtures();
// ...
}
}In your Cept test case, use $I->useFixtures() and $I->loadFixtures():
$I = new FunctionalTester($scenario);
// You should call `useFixtures` before `loadFixtures`
$I->useFixtures('app.users', 'app.posts');
// Then load fixtures manually
$I->loadFixtures('Users', 'Posts');
// or load all fixtures
$I->loadFixtures();$I->expectedCakePHPVersion('3.0.4');All the below forms are equivalent:
$I->amOnRoute(['controller' => 'Posts', 'action' => 'add']);
$I->amOnRoute('addPost'); // assuming there is a route named `addPost`All the below forms are equivalent:
$I->amOnAction('Posts@add');
$I->amOnAction('Posts.add');
$I->amOnAction('PostsController@add');
$I->amOnAction('PostsController.add');
$I->amOnAction('posts@add');
$I->amOnAction('posts.add');All the below forms are equivalent:
$I->seeCurrentRouteIs(['controller' => 'Posts', 'action' => 'add']);
$I->seeCurrentRouteIs('addPost'); // assuming there is a route named `addPost`All the below forms are equivalent:
$I->seeCurrentActionIs('Posts@add');
$I->seeCurrentActionIs('Posts.add');
$I->seeCurrentActionIs('PostsController@add');
$I->seeCurrentActionIs('PostsController.add');
$I->seeCurrentActionIs('posts@add');
$I->seeCurrentActionIs('posts.add');$I->haveInSession('redirect', Router::url(['_name' => 'dashboard']));
$I->haveInSession(['redirect' => Router::url(['_name' => 'dashboard'])]);$I->seeInSession('redirect'); // only checks the key exists.
$I->seeInSession('redirect', Router::url(['_name' => 'dashboard']));
$I->seeInSession(['redirect', Router::url(['_name' => 'dashboard'])]);$I->dontSeeInSession('redirect'); // only checks the key does not exist.
$I->dontSeeInSession('redirect', Router::url(['_name' => 'dashboard']));
$I->dontSeeInSession(['redirect', Router::url(['_name' => 'dashboard'])]);...
| Back | FazBrowse Home | New Git URL |