如果可能,如何配置没有命名空间和 psr-4 的 PHPSpec
How, if possible, to configure PHPSpec with no namespace and psr-4
我正在将 composer 和 PHPSpec 添加到已建立的专有框架中,但是当要测试的 classes 驻留在非标准目录中时,我无法让 PHPSpec 使用全局命名空间使用 psr-4 定义。
项目中需要注意的文件结构如下:
/root
/spec
/classnameSpec.php
/classes
/autoload
/classname.php
autoload 目录充满了应用程序的核心 classes,它们现在必须留在这里,它们不能在 PHPSpec 使用的默认 /src 目录中。
我已经在这个(部分)作曲家文件中使用命名空间工作了
{
"require": {
"phpspec/phpspec": "3.2.2"
},
"autoload": {
"psr-4": {
"Core\": "classes/autoload"
}
}
}
和这个 phpspec.yml 文件:
suites:
autoload_suite:
namespace: 'Core'
spec_prefix: ''
spec_path: ./spec
psr4_prefix: 'Core'
src_path: classes/autoload
但是如果我想要创建针对 运行 的测试,则需要将名称空间添加到所有现有的 classes。
PHPSpec 文档建议可以通过在 yml 文件中省略命名空间 属性 来获得空命名空间,但我尝试的任何组合都会导致错误。
当我做的时候
phpspec desc classname
它很乐意在 spec 文件夹中创建测试 class,但是当我 运行 phpspec 时,我得到:
[InvalidArgumentException]
PSR4 prefix doesn't match given class namespace.
我尝试将这两个属性都保留为 null、''、\\、"\\"、'\\'、\ 并删除它们,但是 none 它们都有效。是否有我可以使用的特定属性组合可以工作,或者我是否不得不先为所有内容添加名称空间?
(我应该注意,我已经将 composer 中的 psr-4 属性 更改为 "\": classes/autoload)
我在 PHPSpec Github 问题页面上得到了我从 Unfunco 寻求的答案。原来你必须完全省略 yml 文件中的属性,而不仅仅是将它们设置为空字符串。
所以作曲家文件看起来像这样:
{
"require": {
"phpspec/phpspec": "3.2.2"
},
"autoload": {
"psr-4": {
"": "classes/autoload"
}
}
还有 yml 文件,这个:
suites:
autoload_suite:
src_path: classes/autoload
我正在将 composer 和 PHPSpec 添加到已建立的专有框架中,但是当要测试的 classes 驻留在非标准目录中时,我无法让 PHPSpec 使用全局命名空间使用 psr-4 定义。 项目中需要注意的文件结构如下:
/root
/spec
/classnameSpec.php
/classes
/autoload
/classname.php
autoload 目录充满了应用程序的核心 classes,它们现在必须留在这里,它们不能在 PHPSpec 使用的默认 /src 目录中。
我已经在这个(部分)作曲家文件中使用命名空间工作了
{
"require": {
"phpspec/phpspec": "3.2.2"
},
"autoload": {
"psr-4": {
"Core\": "classes/autoload"
}
}
}
和这个 phpspec.yml 文件:
suites:
autoload_suite:
namespace: 'Core'
spec_prefix: ''
spec_path: ./spec
psr4_prefix: 'Core'
src_path: classes/autoload
但是如果我想要创建针对 运行 的测试,则需要将名称空间添加到所有现有的 classes。
PHPSpec 文档建议可以通过在 yml 文件中省略命名空间 属性 来获得空命名空间,但我尝试的任何组合都会导致错误。
当我做的时候
phpspec desc classname
它很乐意在 spec 文件夹中创建测试 class,但是当我 运行 phpspec 时,我得到:
[InvalidArgumentException]
PSR4 prefix doesn't match given class namespace.
我尝试将这两个属性都保留为 null、''、\\、"\\"、'\\'、\ 并删除它们,但是 none 它们都有效。是否有我可以使用的特定属性组合可以工作,或者我是否不得不先为所有内容添加名称空间?
(我应该注意,我已经将 composer 中的 psr-4 属性 更改为 "\": classes/autoload)
我在 PHPSpec Github 问题页面上得到了我从 Unfunco 寻求的答案。原来你必须完全省略 yml 文件中的属性,而不仅仅是将它们设置为空字符串。
所以作曲家文件看起来像这样:
{
"require": {
"phpspec/phpspec": "3.2.2"
},
"autoload": {
"psr-4": {
"": "classes/autoload"
}
}
还有 yml 文件,这个:
suites:
autoload_suite:
src_path: classes/autoload