Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/contao/test-case
[READ-ONLY] Contao Test Case
https://github.com/contao/test-case
cms contao php phpunit symfony testcase
Last synced: about 2 months ago
JSON representation
[READ-ONLY] Contao Test Case
- Host: GitHub
- URL: https://github.com/contao/test-case
- Owner: contao
- Created: 2017-11-02T15:37:49.000Z (about 7 years ago)
- Default Branch: 5.x
- Last Pushed: 2024-09-17T06:23:02.000Z (3 months ago)
- Last Synced: 2024-09-27T21:41:09.140Z (3 months ago)
- Topics: cms, contao, php, phpunit, symfony, testcase
- Language: PHP
- Homepage:
- Size: 79.1 KB
- Stars: 6
- Watchers: 5
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Contao test case
Contao is an open source PHP content management system for people who want a professional website that is easy to
maintain. Visit the [project website][1] for more information.The Contao test case provides a PHPUnit test case with some useful methods for testing Contao. Run
`php composer.phar require --dev contao/test-case` to install the package and then use it in your test classes:```php
use Contao\TestCase\ContaoTestCase;class MyTest extends ContaoTestCase
{
}
```## Mocking the Symfony container
The `getContainerWithContaoConfiguration()` method mocks a Symfony container with the default configuration of the
Contao core extension.```php
$container = $this->getContainerWithContaoConfiguration();echo $container->getParameter('contao.upload_path'); // will output "files"
```You can also set a project directory:
```php
$container = $this->getContainerWithContaoConfiguration('/tmp');echo $container->getParameter('kernel.project_dir'); // will output "/tmp"
echo $container->getParameter('kernel.root_dir'); // will output "/tmp/app"
echo $container->getParameter('kernel.cache_dir'); // will output "/tmp/var/cache"
```## Mocking the Contao framework
The `mockContaoFramework)` method mocks an initialized Contao framework.
```php
$framework = $this->mockContaoFramework();
$framework
->expect($this->atLeastOnce())
->method('initialize')
;
```The method automatically adds a Config adapter with the Contao settings:
```php
$framework = $this->mockContaoFramework();
$config = $framework->getAdapter(Contao\Config::class);echo $config->get('datimFormat'); // will output "'Y-m-d H:i'"
```You can optionally add more adapters as argument:
```php
$adapters = [
Contao\Config::class => $configAdapter,
Contao\Encryption::class => $encryptionAdapter,
];$framework = $this->mockContaoFramework($adapters);
```The given Config adapter will overwrite the default Config adapter.
## Mocking an adapter
The `mockAdapter()` method will mock an adapter with the given methods.
```php
$adapter = $this->mockAdapter(['findById']);
$adapter
->method('findById')
->willReturn($model)
;$framework = $this->mockContaoFramework([Contao\FilesModel::class => $adapter]);
```Adapters with a simple return value like above can be further simplified:
```php
$adapter = $this->mockConfiguredAdapter(['findById' => $model]);
```This code does exactly the same as the code above.
## Mocking a class with magic properties
The `mockClassWithProperties()` method mocks a class that uses magic `__set()` and `__get()` methods to manage
properties.```php
$mock = $this->mockClassWithProperties(Contao\PageModel::class);
$mock->id = 2;
$mock->title = 'Home';echo $mock->title; // will output "Home"
```If the class to be mocked is read-only, you can optionally pass the properties as constructor argument:
```php
$properties = [
'id' => 2,
'title' => 'Home',
];$mock = $this->mockClassWithProperties(Contao\PageModel::class, $properties);
echo $mock->title; // will output "Home"
```If you need to call a method of the original class, you can pass the method name as third argument. The resulting mock
object will be a partial mock object without the given method(s).```php
$mock = $this->mockClassWithProperties(Contao\PageModel::class, [], ['getTable']);
$mock->id = 2;echo $mock->getTable(); // will call the original method
```## Mocking a token storage
The `mockTokenStorage()` mocks a token storage with a token returning either a Contao back end or front end user.
```php
$tokenStorage = $this->mockTokenStorage(Contao\BackendUser::class);
$user = $tokenStorage->getToken()->getUser();
```## Using a temporary directory
The `getTempDir()` method creates a temporary directory based on the test class name and returns its path.
```php
$fs = new Filesystem();
$fs->mkdir($this->getTempDir().'/var/cache');
```The directory will be removed automatically after the tests have been run. For this to work, please make sure to always
call the parent `tearDownAfterClass()` method if you define the method in your test class!```php
use Contao\TestCase\ContaoTestCase;class MyTest extends ContaoTestCase
{
public static function tearDownAfterClass()
{
// The temporary directory would not be removed without this call!
parent::tearDownAfterClass();
}
}
```[1]: https://contao.org