phpspec 根据 psr-4 命名空间规范在错误的文件夹中创建文件

标签 php autoload phpspec psr-4

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

我想在我的 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"
        }
    }
  • 我将 psr-4 命名空间添加到 composer.json 文件的 autoload 属性中:

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

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

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

    phpspec describe Acme/Markdown
    
  • 这是我遇到的第一个问题。即使我在 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。

        phpspec run
    

    它提出为我创建类(class),我同意了。从那里我得到了第二个问题;我收到错误消息:

    [PhpSpec\Process\Prerequisites\PrerequisiteFailedException] The type Acme\Markdown was generated but could not be loaded. Do you need to configure an autoloader?

    enter image description here

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

    incorrect namespaced class

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

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

    我查看了文档,但不知道我做错了什么。有什么建议吗?

    最佳答案

    尝试使用

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

    关于phpspec 根据 psr-4 命名空间规范在错误的文件夹中创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33850599/

    相关文章:

    php - 在 phpspec 中测试多个方法的调用

    php - 如何获取多对多关系的不相关对象

    php - Composer 不会自动加载包

    php - 自动加载 Composer 包中的 PHP 文件

    php5.4 自动加载特性

    PHPSpec:通过引用返回的函数

    php - 我如何在 PHPSpec 中处理 Doctrine QueryBuilder?

    php - 从 mysql 迁移到 mysqli 或 pdo?

    javascript - 数量价格折扣 html/java/php

    php - 在 laravel 中使用 storeAs() 上传图像时调整图像大小