【问题标题】:phpspec creates files in wrong folders per psr-4 namespace specificationphpspec 根据 psr-4 命名空间规范在错误的文件夹中创建文件
【发布时间】:2016-02-24 08:27:43
【问题描述】:

我放弃了我的问题的早期形式,因为它太复杂了。这是新版本。

我想在我的 psr-4 格式项目中使用 phpspec。

这是我尝试设置测试项目的方式:

  1. 为项目创建了一个新文件夹:

    cd ~/Desktop/
    mkdir TestPhpSpec
    cd TestPhpSpec
    
  2. 创建一个新的composer.json 文件并需要phpspec:

    composer require phpspec/phpspec
    

这会创建我的composer.json 文件:

    {
        "require": {
            "phpspec/phpspec": "^2.3"
        }
    }
  1. 我将我的 psr-4 命名空间添加到我的 composer.json 文件的 autoload 属性中:

    {
        "require": {
            "phpspec/phpspec": "^2.3"
        },
        "autoload": {
            "psr-4": {
                "Acme\\": "src/Acme"
            }
        }
    }
    
  2. 然后我转储我的自动加载以确保我的命名空间已加载:composer dumpautoload

  3. 之后,我创建了我的phpspec.yml 来向 phpspec 描述命名空间:

    suites:
      acme_suite:
          namespace: Acme
          psr4_prefix: Acme
    
  4. 然后我描述我要开始构建的类:

    phpspec describe Acme/Markdown
    

这是我遇到的第一个问题。即使我在 describe 命令中指定了 Acme 命名空间,规范也不会放置在与命名空间匹配的文件夹中:

虽然它创建的类的命名空间是正确的:

<?php

namespace spec\Acme; // correct namespace

use PhpSpec\ObjectBehavior;
use Prophecy\Argument;

class MarkdownSpec extends ObjectBehavior
{
    function it_is_initializable()
    {
        $this->shouldHaveType('Acme\Markdown');
    }
}

然后,如果我尝试运行测试以开始 TDD-ing。

    phpspec run

它提议为我创建课程,我同意了。从那里我得到了第二个问题;我收到错误消息:

[PhpSpec\Process\Prerequisites\PrerequisiteFailedException] Acme\Markdown 类型已生成但无法加载。需要配置自动加载器吗?

它创建的类不在它的命名空间文件夹中:

它创建的类的命名空间也正确:

<?php

namespace Acme; // correct namespace

class Markdown
{
}

我查看了文档,但无法弄清楚我做错了什么。有什么建议吗?

【问题讨论】:

    标签: php autoload phpspec psr-4


    【解决方案1】:

    试试

    suites:
      acme_suite:
          src_path: Acme/src
          spec_path: Acme/spec
    

    【讨论】:

    • 我试了一下。现在我的规范是在根级别的 Acme 命名空间文件夹中创建的(我不介意),但是当我运行规范时,我被问到是否希望它创建仍然被放置的类我的src 文件夹的根级别。创建的类具有正确的命名空间声明,但它不在正确的命名空间文件夹中,phpspec 仍然无法自动加载该类:/
    • @ChrisSchmitz 您确定需要在配置和作曲家中同时指定命名空间/psr4_prefix 吗?我不确定...
    • 嗯,我不确定(仍然想学习如何使用 phpspec),但我怀疑你确实需要两者。我在作曲家中需要它来自动加载项目,并且 phpspec 文档有一个关于 using psr-4 with phpspec 的特定部分。也就是说,如果没有套件规范,我会很快尝试一下。
    • holy...shit... 我刚刚清空了我的 phpspec.yml 文件,删除了所有无效的规范和 src 文件,做了一个全新的 descrun 并且它起作用了。我不敢相信我花了这么多时间试图在不需要它时配置它 * facepalm *。非常感谢你帮我解决这个问题!
    • 即使做了上面提到的,我也没有让它工作,直到我做了那个受欢迎的composer dumpautoload
    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 2021-07-13
    • 2023-03-25
    • 2017-03-11
    • 2021-09-18
    • 2015-01-02
    • 2015-12-01
    相关资源
    最近更新 更多