如果可能,如何配置没有命名空间和 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