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. composer.jsonファイルの autoload プロパティに psr-4 名前空間を追加します。

    {
        "require": {
            "phpspec/phpspec": "^2.3"
        },
        "autoload": {
            "psr-4": {
                "Acme\\": "src/Acme"
            }
        }
    }
    
  2. 次に、自動ロードをダンプして、名前空間がロードされていることを確認します。composer dumpautoload

  3. その後phpspec.yml、名前空間を phpspec に記述するために my を作成します。

    suites:
      acme_suite:
          namespace: Acme
          psr4_prefix: Acme
    
  4. 次に、構築を開始するクラスについて説明します。

    phpspec describe Acme/Markdown
    

ここで最初の問題にぶつかります。コマンドでAcme 名前空間を指定してもdescribe、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

それは私のためにクラスを作成することを提案し、私はそれを許可しました. そこから、2 番目の問題が発生します。エラーメッセージが表示されます:

[PhpSpec\Process\Prerequisites\PrerequisiteFailedException] タイプ Acme\Markdown が生成されましたが、読み込めませんでした。オートローダーを構成する必要がありますか?

ここに画像の説明を入力

そして、それが作成するクラスは、その名前空間フォルダーにはありません:

不適切な名前空間クラス

それが作成するクラスも正しく名前空間化されます。

<?php

namespace Acme; // correct namespace

class Markdown
{
}

私はドキュメントに目を通しましたが、何が間違っているのかわかりません。助言がありますか?

4

1 に答える 1