Contao — это система управления контентом PHP с открытым исходным кодом для людей, которым нужен профессиональный веб-сайт, который легко поддерживать. Посетите сайт проекта для получения дополнительной информации.
Тестовый пример Contao предоставляет тестовый пример PHPUnit с некоторыми полезными методами для тестирования Contao. Запустите php composer.phar require --dev contao/test-case
, чтобы установить пакет, а затем используйте его в своих тестовых классах:
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
}
Метод getContainerWithContaoConfiguration()
имитирует контейнер Symfony с конфигурацией по умолчанию основного расширения Contao.
$ container = $ this -> getContainerWithContaoConfiguration ();
echo $ container -> getParameter ( ' contao.upload_path ' ); // will output "files"
Вы также можете установить каталог проекта:
$ 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"
mockContaoFramework)
имитирует инициализированную платформу Contao.
$ framework = $ this -> mockContaoFramework ();
$ framework
-> expect ( $ this -> atLeastOnce ())
-> method ( ' initialize ' )
;
Метод автоматически добавляет адаптер Config с настройками Contao:
$ framework = $ this -> mockContaoFramework ();
$ config = $ framework -> getAdapter ( Contao Config::class);
echo $ config -> get ( ' datimFormat ' ); // will output "'Y-m-d H:i'"
При желании вы можете добавить дополнительные адаптеры в качестве аргумента:
$ adapters = [
Contao Config::class => $ configAdapter ,
Contao Encryption::class => $ encryptionAdapter ,
];
$ framework = $ this -> mockContaoFramework ( $ adapters );
Данный адаптер конфигурации перезапишет адаптер конфигурации по умолчанию.
mockAdapter()
будет имитировать адаптер с помощью заданных методов.
$ adapter = $ this -> mockAdapter ([ ' findById ' ]);
$ adapter
-> method ( ' findById ' )
-> willReturn ( $ model )
;
$ framework = $ this -> mockContaoFramework ([ Contao FilesModel::class => $ adapter ]);
Адаптеры с простым возвращаемым значением, как указано выше, можно еще упростить:
$ adapter = $ this -> mockConfiguredAdapter ([ ' findById ' => $ model ]);
Этот код делает то же самое, что и код выше.
mockClassWithProperties()
имитирует класс, который использует магические методы __set()
и __get()
для управления свойствами.
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class);
$ mock -> id = 2 ;
$ mock -> title = ' Home ' ;
echo $ mock -> title ; // will output "Home"
Если издеваемый класс доступен только для чтения, вы можете при желании передать свойства в качестве аргумента конструктора:
$ properties = [
' id ' => 2 ,
' title ' => ' Home ' ,
];
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, $ properties );
echo $ mock -> title ; // will output "Home"
Если вам нужно вызвать метод исходного класса, вы можете передать имя метода в качестве третьего аргумента. Полученный фиктивный объект будет частичным фиктивным объектом без заданных методов.
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, [], [ ' getTable ' ]);
$ mock -> id = 2 ;
echo $ mock -> getTable (); // will call the original method
mockTokenStorage()
имитирует хранилище токенов, возвращая токен либо внутреннему, либо внешнему пользователю Contao.
$ tokenStorage = $ this -> mockTokenStorage ( Contao BackendUser::class);
$ user = $ tokenStorage -> getToken ()-> getUser ();
Метод getTempDir()
создает временный каталог на основе имени тестового класса и возвращает его путь.
$ fs = new Filesystem ();
$ fs -> mkdir ( $ this -> getTempDir (). ' /var/cache ' );
Каталог будет удален автоматически после запуска тестов. Чтобы это работало, обязательно всегда вызывайте родительский tearDownAfterClass()
, если вы определяете этот метод в своем тестовом классе!
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
public static function tearDownAfterClass ()
{
// The temporary directory would not be removed without this call!
parent :: tearDownAfterClass ();
}
}