Я пытаюсь использовать аспект макет с тестами кодового восприятия.
Из их документации не понятно, как настроить.
https://github.com/Codeception/AspectMock
Включите AspectMock \ Kernel в tests / _bootstrap.php.
У меня нет такого файла. Должен ли я создать это? Где я должен включить это?
Моя структура каталогов кодирования:
тест / codeception / прием.
У меня есть файл SummaryCest.php в тестовом / кодовом восприятии / приемке.
Поскольку у меня нет файла _bootstrap.php, я решил попробовать в SummaryCest — перед объявлением класса:
include __DIR__.'/../../../vendor/autoload.php'; // composer autoload
$kernel = \AspectMock\Kernel::getInstance();
$kernel->init([
'debug' => true,
'includePaths' => [__DIR__.'/../../../'],
'excludePaths' => [__DIR__.'../../../vendor'],
'cacheDir' => '/tmp/datamanager',
]);
Я не знаю, действительно ли мне нужно исключить каталог поставщиков, но я видел такие предложения. Если это обязательно, это должно быть написано, вероятно, в readme, который я не видел.
В includePaths должны быть видны все файлы моего проекта.
У меня есть функция в SummaryCest.php
public function correctSummaryCounts(AcceptanceTester $I)
{
\AspectMock\Test::double(SummaryController::class, ['get' => null]);
}
и когда я запускаю тест
php codecept.phar run test/codeception/acceptance/SummaryCest.php
Я получаю сообщение
==== Redirecting to Composer-installed version in vendor/codeception ====
Codeception PHP Testing Framework v2.3.5
Powered by PHPUnit 6.2.4 by Sebastian Bergmann and contributors.
PHP Fatal error: Uncaught Error: Class 'Go\ParserReflection\ReflectionFile' not found in /var/www/warehouseDataManager/vendor/codeception/aspect-mock/src/AspectMock/Intercept/BeforeMockTransformer.php:16
Stack trace:
#0 /var/www/warehouseDataManager/vendor/goaop/framework/src/Instrument/Transformer/CachingTransformer.php(124): AspectMock\Intercept\BeforeMockTransformer->transform(Object(Go\Instrument\Transformer\StreamMetaData))
#1 /var/www/warehouseDataManager/vendor/goaop/framework/src/Instrument/Transformer/CachingTransformer.php(83): Go\Instrument\Transformer\CachingTransformer->processTransformers(Object(Go\Instrument\Transformer\StreamMetaData))
#2 /var/www/warehouseDataManager/vendor/goaop/framework/src/Instrument/ClassLoading/SourceTransformingLoader.php(134): Go\Instrument\Transformer\CachingTransformer->transform(Object(Go\Instrument\Transformer\StreamMetaData))
#3 /var/www/warehouseDataManager/vendor/goaop/framework/src/Instrument/ClassLoading/SourceTransformingLoader.php(101): Go\Instrument\ClassLoading\SourceTran in /var/www/warehouseDataManager/vendor/codeception/aspect-mock/src/AspectMock/Intercept/BeforeMockTransformer.php on line 16
Можете ли вы объяснить мне, как настроить это?
Также я видел в readme
$userModel = test::double('UserModel', ['tableName' => 'my_users']);
но тест даже не найден. Поэтому я попытался использовать \ AspectMock \ Test, который по крайней мере найден.
Обратите внимание, что ошибка выдается еще до запуска моей тестовой функции. Когда я попытался запустить до объявления класса
$kernel->init();
это уже дает ту же ошибку.
_bootstrap.php
файлы больше не создаются автоматически Codeception.
Чтобы включить их, вы должны добавить
settings:
bootstrap: _bootstrap.php
в файл codeception.yml
и вручную создайте файлы _bootstrap.php в каталоге тестов и в каждом наборе.
http://codeception.com/docs/reference/Configuration
Проблема ReflectionFile выглядит как проблема автозагрузки.
Других решений пока нет …