komposer - pengujian paket yang dibuat - kelas tidak ditemukan

Saya mencoba membuat paket Hello world dengan komposer dari tutorial ini

http://grossi.io/2013/creating-your-first-composer-packagist-package/

Entah bagaimana saya telah berhasil membuatnya dan mengujinya setengah hari yang lalu, tetapi sekarang di direktori yang berbeda saya telah mencoba lagi beberapa kali - tidak dapat membuatnya berfungsi dan tidak mengerti mengapa saya mendapatkan kesalahan yang akan saya tunjukkan nanti.

Inilah yang saya lakukan:

Di direktori HelloWorld saya membuat direktori src. Di direktori src saya meletakkan file SayHello.php

namespace HelloWorld;

class SayHello
{
    public static function world()
    {
        return 'Hello World, Composer!';
    }
}

Berlari

composer init

Setelah membuat file composer.json, saya edit dan pada akhirnya seperti ini:

{
    "name": "vagrant/hello-world",
    "description": "test",
    "license": "no",
    "authors": [
        {
            "name": "darius",
            "email": "[email protected]"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "php": ">=5.3.0"
    },
    "autoload": {
        "psr-0": {
            "HelloWorld": "src/"
        }
    }
}

Lalu aku lari

composer install

Saya mendapatkan keluaran:

Loading composer repositories with package information
Installing dependencies (including require-dev)
Nothing to install or update
Generating autoload files

Tutorial mengatakan

Komposer yang diinstal membuat direktori "tes" di dalam direktori root Anda.

Tapi saya tidak melihat direktori tersebut, jadi saya membuatnya sendiri di direktori HelloWorld. Mungkin penulis ketinggalan menambahkan sesuatu.

Lalu saya membuat file test.php

require_once __DIR__ . '/../vendor/autoload.php'; // Autoload files using Composer autoload

use HelloWorld\SayHello;

echo SayHello::world();

Berlari:

php tests/test.php

Dan dapatkan:

Kesalahan Fatal PHP: Kelas 'HelloWorld\SayHello' tidak ditemukan di /home/vagrant/package_dev/workbench/oitlabs/HelloWorld/tests/test.php on line 7

Bagaimana sekarang dia bisa melihatnya? Saya mencoba menambahkan ke test.php

require_once __DIR__ . '/../src/SayHello.php';

kemudian ia melihat dan berfungsi, jadi itu berarti ia harus melihat file tersebut. Jadi sepertinya komposer menghasilkan file autoload yang salah atau semacamnya. Bagaimana saya bisa men-debug ini?

Juga mencoba langkah yang sama di direktori lain dekat direktori yang pertama kali saya berhasil, hanya menggunakan namespace Halo. Kesalahan yang sama.

Ini juga filenya - tampilan paket saya, apa yang dihasilkan oleh komposer: http://www58.zippyshare.com/v/Hsfg4pVf/file.html


person Dariux    schedule 20.01.2015    source sumber


Jawaban (1)


Masalahnya adalah - saya perlu memiliki direktori "HelloWorld" di direktori src.

Jadi struktur foldernya akan terlihat seperti ini:

Root
  src
      HelloWorld
            SayHello.php
  tests
      test.php
  vendor
  composer.json
person Dariux    schedule 21.01.2015
comment
Namun siapa pun yang mengetahui cara lebih cepat untuk men-debug struktur direktori dan namespace, dipersilakan untuk memberi tahu :) - person Dariux; 21.01.2015
comment
Apakah diperlukan untuk membuat direktori test ?? - person Jabaa; 10.03.2017
comment
@Jabaa - mungkin tidak, tapi berguna. Biasanya Anda harus melakukan tes otomatis. Dan juga saat mengembangkan, Anda tidak perlu menggunakan proyek nyata sebagai lingkungan pengujian. Anda menjalankan pengujian dari direktori ini dan mengetahui apakah Anda mengimplementasikan fungsionalitas atau tidak. - person Dariux; 11.03.2017