我将composer和PHPSpec添加到已建立的专有框架中,但是当要测试的类驻留在必须使用psr-4定义的非标准目录中时,我无法使PHPSpec与全局命名空间一起使用。 您需要在项目中注意的文件结构如下:
/root
/spec
/classnameSpec.php
/classes
/autoload
/classname.php
自动加载目录中填充了应用程序的核心类,它们必须暂时保留在此处,它们不能位于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
但如果我想创建针对它们运行的测试,则必须向所有现有类添加名称空间。
PHPSpec文档建议通过在yml文件中省略namespace属性来获得null命名空间,但是我尝试的任何组合都会导致错误。
当我这样做时
phpspec desc classname
它很愉快地在spec文件夹中创建了测试类,但是当我运行phpspec时,我得到:
[InvalidArgumentException]
PSR4 prefix doesn't match given class namespace.
我尝试将这两个属性保留为null,'',\\,“\\”,'\\',\并删除它们,但它们都不起作用。是否存在可以使用的特定属性组合,或者我是否必须先将名称空间添加到所有内容中?
(我应该注意,我已将作曲家中的psr-4属性更改为“\”:classes / autoload)
答案 0 :(得分:0)
我在PHPSpec Github问题页面上得到了Unfunco的答案。事实证明,你必须完全省略yml文件中的属性,而不仅仅是将它们设置为空字符串。
因此,composer文件如下所示:
{
"require": {
"phpspec/phpspec": "3.2.2"
},
"autoload": {
"psr-4": {
"": "classes/autoload"
}
}
和yml文件,这个:
suites:
autoload_suite:
src_path: classes/autoload