Я пытаюсь использовать аспектный макет с проверками кода.
Из их документации не ясно, как настроить.
https://github.com/Codeception/AspectMock
Включите AspectMock \ Kernel в тесты / _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 выглядит как проблема автозагрузки.