如果可能,如何配置没有命名空间和psr-4的PHPSpec

时间:2017-01-20 00:08:32

标签: php namespaces phpspec psr-4

我将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)

1 个答案:

答案 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
相关问题