2017-10-27 23 views
0

base_path()ヘルパーを使用する属性メソッドをチェックするユニットテストを作成しようとしていますが、例外が発生しています:Call to undefined method Illuminate\Container\Container::basePath()ユニットテストをLaravelで行ったときのsetUp/tearDownフィクスチャ

フルスタックトレースは以下の通りです:私はsetUptearDown備品を使用することを突き止めました

\vendor\laravel\framework\src\Illuminate\Foundation\helpers.php:179 
\app\Message.php:47 
\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php:432 
\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php:333 
\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php:306 
\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php:1279 
\tests\Unit\MessageTest.php:59 

- 私が持っている場合でも:

public function setUp() 
{ 
    //$_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__) . "/../.."; 
} 

public function tearDown() 
{ 
    //unset($_SERVER['DOCUMENT_ROOT']); 
} 

私は上記を取得していますエラー。治具を完全に取り外すと、エラーは消えてしまいます。

私はsetUpBeforeClasstearDownAfterClassで与えられたメソッドを置き換えたら、エラーが消えるが、私はそれを引き起こしているかを知りたいと思います。

私が知っている限り、これはvanilla Laravel 5.4のインストール(正確には5.4.36)ですが、追加のライブラリがインストールされています(実際にはどのライブラリも言うことができません)。私はphpunit.xmlファイルをセットアップしていませんが、公正であるためには何を探すべきか分かりません。

私はLaravel(同バージョン)を新しくインストールしてテストしましたが、まったくそのまま(そのままの状態でphpunit.xmlファイルがあります)。バージョン5.5ではそうではありません。

答えて

1

親クラスのsetUpメソッドとtearDownメソッドを自分の中で呼び出してみてください。トリックをしましたが、それはそうである理由を知っています

public function setUp() 
{ 
    parent::setUp() 
    //$_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__) . "/../.."; 
} 

public function tearDown() 
{ 
    parent::tearDown() 
    //unset($_SERVER['DOCUMENT_ROOT']); 
} 
+0

:そうのよう

? – eithed

+0

テストクラスの継承に従うと、 イルミネーション\ Foundation \ Testing \ TestCaseになります。 –

+1

このクラスには、実際にすべてのテストでLaravelを設定する独自のsetUpメソッドとtearDownメソッドがあります。したがって、テストクラスでparent :: setUp()を呼び出さないと、このコードは実行されず、Laravel Appもなくエラーが発生します。 独自のsetUp/tearDownメソッドがない場合、setUp/tearDownの親クラスバージョンはPHPによって自動的に実行されます。 –

関連する問題