Commit f51d0180 by Qiang Xue

Merge pull request #2159 from Ragazzo/codeception_ext_docs_fix

Codeception ext docs fix
parents 1fb4e152 1949c532
...@@ -41,6 +41,11 @@ and application destroy after each test. You can configure a mock application us ...@@ -41,6 +41,11 @@ and application destroy after each test. You can configure a mock application us
`TestCase` is extended from `Codeception\TestCase\Case` so all methods and assertions are available. `TestCase` is extended from `Codeception\TestCase\Case` so all methods and assertions are available.
You may use codeception modules and fire events in your test, just use methods: You may use codeception modules and fire events in your test, just use methods:
Getting Codeception modules
---------------------------
If you want to use codeception modules and helpers in your unit tests, you can do it like this:
```php ```php
<?php <?php
#in your unit-test #in your unit-test
...@@ -53,8 +58,10 @@ You also can use all guy methods by accessing guy instance like: ...@@ -53,8 +58,10 @@ You also can use all guy methods by accessing guy instance like:
<?php <?php
$this->codeGuy->someMethodFromModule(); $this->codeGuy->someMethodFromModule();
``` ```
Codeception events
------------------
to fire event do this: To fire event do this:
```php ```php
<?php <?php
...@@ -68,6 +75,10 @@ public function testSomething() ...@@ -68,6 +75,10 @@ public function testSomething()
this event can be catched in modules and helpers. If your test is in the group, then event name will be followed by the groupname, this event can be catched in modules and helpers. If your test is in the group, then event name will be followed by the groupname,
for example ```myevent.somegroup```. for example ```myevent.somegroup```.
Special test method chaining
----------------------------
Execution of special tests methods is (for example on ```UserTest``` class): Execution of special tests methods is (for example on ```UserTest``` class):
``` ```
...@@ -88,49 +99,121 @@ tests\unit\models\UserTest::tearDownAfterClass(); ...@@ -88,49 +99,121 @@ tests\unit\models\UserTest::tearDownAfterClass();
If you use special methods dont forget to call its parent. If you use special methods dont forget to call its parent.
Customizing application config
------------------------------
You may need to specify different configuration files per test cases, to do this you can make it like the following:
```php ```php
<?php <?php
SomeConsoleTest extends \yii\codeception\TestCase SomeConsoleTest extends \yii\codeception\TestCase
{ {
// this is the config file to load as application config // this is the config file to load as application config
public static $applicationConfig = '@app/config/web.php'; public $appConfig = '@app/path/to/my/custom/config/for/test.php';
// this defines the application class to use for mock applications
protected $applicationClass = 'yii\web\Application';
} }
``` ```
The `$applicationConfig` property may be set for all tests in a `_bootstrap.php` file like this: The `$appConfig` property could be an array or a valid alias, pointing to the file that returns a config array. You can specify
application class in the config, for example for testing console commands or features you can create `_console.php` config under
`tests/unit` directory like this:
```php ```php
<?php return yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../config/console.php'),
yii\codeception\TestCase::$applicationConfig = yii\helpers\ArrayHelper::merge( require(__DIR__ . '/../_config.php'),
require(__DIR__ . '/../../config/web.php'), [
require(__DIR__ . '/../../config/codeception/unit.php') 'class' => 'yii\console\Application',
'components' => [
//override console components if needed
],
]
); );
``` ```
Don't forget that you have to include autoload and Yii class in the `_bootstrap.php` file. and then just use your `ConsoleTestCase` like the following:
```php
You also can reconfigure some components for tests, for this purpose there is a `$config` property in the `TestCase` class. use \yii\codeception\TestCase;
class ConsoleTestCase extends TestCase
{
public $appConfig = '@tests/unit/_console.php';
}
```
You can extend other console test cases from this basic `ConsoleTestCase`.
Reconfiguring components for testing
------------------------------------
You can reconfigure a component for testing, for this purpose in your `setUp` method of your test case
you can do this for example:
```php ```php
<?php <?php
SomeOtherTest extends \yii\codeception\TestCase use \yii\codeception\TestCase;
use Yii;
class MailTest extends TestCase
{ {
public $config = [
'components' => [ protected function setUp()
'mail' => [ {
'useFileTransport' => true, // don't forget to call parent method that will setup Yii application
parent::setUp();
Yii::$app->mail->fileTransportCallback = function ($mailer, $message) {
return 'testing_message.eml';
};
}
}
```
You don't need to worry about application instances and isolation because application will be created [each time](https://github.com/yiisoft/yii2/blob/master/extensions/codeception/TestCase.php#L31) before any of test method will be executed in test case.
You can mock application in a different way. For this purposes you have method [`mockApplication`](https://github.com/yiisoft/yii2/blob/master/extensions/codeception/TestCase.php#L55) available in your test case.
This method creates new application instance and replaces old one with it and is handy when you need to create application with a config that is different from other test methods in the current test suite. For example:
```php
use \yii\codeception\TestCase;
class SomeMyTest extends TestCase
{
public function testOne()
{
...
}
public function testTwo()
{
$this->mockApplication([
'language' => 'ru-RU',
'components' => [
'db' => [
//your custom configuration here
],
], ],
] ]);
];
//your expectations and assertions goes here
}
public function testThree()
{
...
}
} }
``` ```
Additional debug output
-----------------------
Because of Codeception buffers all output you can't make simple `var_dump()` in the TestCase, instead you need to use Because of Codeception buffers all output you can't make simple `var_dump()` in the TestCase, instead you need to use
`Codeception\Util\Debug::debug()` function and then run test with `--debug` key, for example: `Codeception\Util\Debug::debug()` function and then run test with `--debug` key, for example:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment