2

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

我想在我的 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. 之后,我创建了 myphpspec.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
{
}

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

4

1 回答 1

4

尝试

suites:
  acme_suite:
      src_path: Acme/src
      spec_path: Acme/spec
于 2015-11-24T07:52:47.660 回答