0

パッケージを開発したいのですが、Eloquent モデルの部分で行き詰っています。ワークベンチに次のようなパッケージがありますworkbench/vendor/workbench/src/models

私のモデルは

<?php namespace Vendor\Shop\Models;

/**
 * A catalog
 */
class Catalog extends \Eloquent {

    // Define the database
    protected $table = 'catalogs';

    // Mass assignment restriction
    protected $fillable = array('name');

}

?>

私の問題は、Eloquent 名前空間のインポートです。これは適切ではないと思います。なぜなら、PHPUnit で UnitTest を実行すると、単純に失敗するからです。Class 'Eloquent' not found

これは作曲家のオートローディングが原因ですか? composer ファイルからの抜粋:

"require" : {
    "php" : ">=5.3.0",
    "illuminate/support" : "4.0.x",
    "illuminate/database": "4.0.x"
},
"autoload" : {
    "classmap" : [
        "src/controllers",
        "src/models",
        "src/migrations",
        "src/database/seeds"
    ],
    "psr-0": {
        "Vendor\\Shop" : "src/"
    }
},
4

2 に答える 2

0

Jason Lewis がコメントで述べたように、ここでの主な問題は、phpunit がブートストラップする場所です。Laravel を新規インストールしたフォルダーで Laravel パッケージを開発している場合workbench、パッケージはフレームワークに依存せず、Laravel のみに依存すると想定しても問題ありません。

そのため、単体テストを他のすべてのものから排他的にパッケージ ディレクトリで実行する必要はありません。つまり、ある種の CI プロセスが台無しになることを心配していないと仮定しますが、おそらくいくつかの回避策があります。これはもう少し研究します。

というわけで、第3案を選びました。TestCase通常どおりにパッケージのテストを拡張するだけです。

class MyAwesomeTest extends TestCase {}

次に、コマンド ラインでcd親 Laravel プロジェクトのルートに移動し、ワークベンチ ディレクトリを引数として phpunit を実行します。

phpunit workbench/vender/my-package/tests/

これにより、パッケージのすべての単体テストが親 Laravel のブートストラップで実行されるため、慣れ親しんだすべての素晴らしい Laravel 単体テストのヘルプにアクセスできるようになります。

于 2014-03-22T09:35:54.807 に答える