phpspec根据psr-4命名空间规范

时间:2015-11-22 01:20:44

标签: php autoload phpspec psr-4

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

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

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

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

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

    composer require phpspec/phpspec
    
  3. 创建我的composer.json文件:

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

      {
          "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
      
    5. 这是我遇到第一个问题的地方。即使我在describe命令中指定了Acme命名空间,规范也不会放在与命名空间匹配的文件夹中:

      Incorrect namespaced spec

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

      <?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 \过程\先决条件\ PrerequisiteFailedException]   Acme \ Markdown类型已生成但无法加载。您需要配置自动加载器吗?

      enter image description here

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

      incorrect namespaced class

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

      <?php
      
      namespace Acme; // correct namespace
      
      class Markdown
      {
      }
      

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

1 个答案:

答案 0 :(得分:3)

尝试

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