5

Codeceptionを使用してLaravel 4単体テストを実行しようとしています。

依存関係のない単純なクラスのテストを実行すると、問題なく動作します。しかし、Eloquent に依存するモデルをインスタンス化すると、次の致命的なエラーが発生します。

PHP 致命的なエラー: 4 行目の /var/www/project/app/models/Role.php にクラス 'Eloquent' が見つかりません

単体テスト:

<?php
use Codeception\Util\Stub;
class TestModel extends \Codeception\TestCase\Test 
{
  public function testExample()
  {
    $role = new Role;
    $role->name = 'superuser';
    $this->assertEquals('superuser', $role->name);
  }
}

モデル:

<?php
class Role extends Eloquent
{
  public function users()
  {
    return $this->belongsToMany('User');
  }
}

プロジェクトの構造:

次のファイル構造で、プロジェクト ルートからvendor/bin/codecept 実行ユニットを実行しています。

/project
  codeception.yml
  /vendor/bin/codecept
  /app
    /tests
      unit.suite.yml
      /unit
         ExampleTest.php
    /models
       Role.php
                ...etc

私は何を間違っていますか?

4

6 に答える 6

8

Codeception L4 サンプル アプリを見ると、次の行をproject/app/tests/_boostrap.phpに追加することで、この問題を解決するためにオートロードをブートストラップする方法を確認できました。

include __DIR__.'/../../vendor/autoload.php';
$app = require_once __DIR__.'/../../bootstrap/start.php';
\Codeception\Util\Autoload::registerSuffix('Page', __DIR__.DIRECTORY_SEPARATOR.'_pages');

編集: Laravel 4.0 から 4.1 にアップグレードする場合、次の行を追加する必要もあります。

$app->boot();
于 2013-10-31T14:11:38.337 に答える
3

この質問に対する答えは、今では少し古くなっています。Laravel 5でも同じエラー ( Class 'Eloquent' not found... )が発生し、Laravels ベースのTestCase.php ファイルからコードをコピーして解決しました。このファイルは、Laravel フレームワーク内でのテストに使用されます (codeception は使用しません)。

「Eloquent not found」エラーを修正するには、次の行をproject/tests/unit/_bootstrap.phpに追加します。

<?php
$app = require __DIR__.'/../../bootstrap/app.php';
$app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();

正直なところ、なぜ機能するのかわかりませんが、機能します! 理由や誰かがコメントした場合は編集します。

于 2015-08-19T19:39:24.633 に答える
3

私はおそらくパーティーに遅れていますが、コードセプトが必要ない場合. 単にTestCaseと呼ばれるPHPUnit_Framework_TestCaseのlaravelの実装を拡張する必要があります。このような:

class TestModel extends TestCase {
}
于 2014-01-29T01:03:47.340 に答える
0

次の行を追加することで、Laravel 4 と Codeception で同様の問題を解決しました。_bootstrap.php

$app = require __DIR__.'/../../bootstrap/start.php'; $app->boot();

これが仲間のグーグルユーザーに役立つことを願っています!

于 2016-06-01T10:13:30.173 に答える
0

Eloquent単体テストの実行中にクラスが見つかりません。

に追加use Illuminate\Database\Eloquent\Model as Eloquent;してみてくださいRole.php

于 2014-02-09T12:09:31.743 に答える