未找到方面模拟 'Go\ParserReflection\ReflectionFile'
Aspect mock 'Go\ParserReflection\ReflectionFile' not found
我正在尝试将方面模拟与代码测试一起使用。
从他们的文档中不清楚如何配置。
https://github.com/Codeception/AspectMock
Include AspectMock\Kernel into tests/_bootstrap.php.
我没有这样的文件。我应该创建它吗?我应该在哪里添加它?
我的codeception目录结构是:
test/codeception/acceptance.
我在 test/codeception/acceptance 中有文件 SummaryCest.php。
因为我没有 _bootstrap.php 文件,所以我决定在 SummaryCest 中尝试 - 在声明 class:
之前
include __DIR__.'/../../../vendor/autoload.php'; // composer autoload
$kernel = \AspectMock\Kernel::getInstance();
$kernel->init([
'debug' => true,
'includePaths' => [__DIR__.'/../../../'],
'excludePaths' => [__DIR__.'../../../vendor'],
'cacheDir' => '/tmp/datamanager',
]);
我不知道我是否真的需要排除供应商目录,但我看到了这样的建议。如果那是强制性的,它应该写在我没有看到的自述文件中。
在 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。
请注意,错误甚至在 运行我的测试函数之前就已抛出。当我在 class 声明
之前尝试 运行ning
$kernel->init();
它已经给出了同样的错误。
_bootstrap.php
文件不再由 Codeception 自动创建。
要启用它们,您必须添加
settings:
bootstrap: _bootstrap.php
到codeception.yml文件
并在测试目录和每个套件中手动创建 _bootstrap.php 个文件。
http://codeception.com/docs/reference/Configuration
ReflectionFile 问题看起来像自动加载问题。
我正在尝试将方面模拟与代码测试一起使用。
从他们的文档中不清楚如何配置。
https://github.com/Codeception/AspectMock
Include AspectMock\Kernel into tests/_bootstrap.php.
我没有这样的文件。我应该创建它吗?我应该在哪里添加它?
我的codeception目录结构是:
test/codeception/acceptance.
我在 test/codeception/acceptance 中有文件 SummaryCest.php。
因为我没有 _bootstrap.php 文件,所以我决定在 SummaryCest 中尝试 - 在声明 class:
之前include __DIR__.'/../../../vendor/autoload.php'; // composer autoload
$kernel = \AspectMock\Kernel::getInstance();
$kernel->init([
'debug' => true,
'includePaths' => [__DIR__.'/../../../'],
'excludePaths' => [__DIR__.'../../../vendor'],
'cacheDir' => '/tmp/datamanager',
]);
我不知道我是否真的需要排除供应商目录,但我看到了这样的建议。如果那是强制性的,它应该写在我没有看到的自述文件中。
在 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。
请注意,错误甚至在 运行我的测试函数之前就已抛出。当我在 class 声明
之前尝试 运行ning$kernel->init();
它已经给出了同样的错误。
_bootstrap.php
文件不再由 Codeception 自动创建。
要启用它们,您必须添加
settings:
bootstrap: _bootstrap.php
到codeception.yml文件 并在测试目录和每个套件中手动创建 _bootstrap.php 个文件。
http://codeception.com/docs/reference/Configuration
ReflectionFile 问题看起来像自动加载问题。