2017-02-13 5 views
0

私はConfigファサードに依存するパッケージを開発中です。 コード自体は問題なく動作しますが、テスト時に問題が発生しています。 モックはLaravelなしのファサードを照らします

Config::shouldReceive('foo.bar') 
    ->andReturn(true); 

として多くのothers

が、私はいくつかの問題にぶつかった:

当初、私はこのコードを使用していました。

私は後でConfigファサードisn't encouragedを嘲笑して読んでいます。

はそれを回避するために、ほとんどの人が代わりに次使用することをお勧めする傾向がある:あなたがLaravel /ルーメンからテストしている場合、私は数える

Config::set('foo.bar', true); 

は、正常に動作します。

しかし、私の問題は、私はそうではありません。 RuntimeException: A facade root has not been set.

この時点で、いくつかは、私はちょうどConfigリポジトリ依存性を注入すべきであることを示唆しているかもしれませんが、私はConfigファサードを使用しています:私はちょうど私が得るので、それが動作しませんので、いくつかのIlluminateのパッケージに依存していますEloquentモデルで使用されている特性では、DIは機能しません。

私はこれに取り組むことができる他の方法はありますか?

ありがとうございます!

PS:この質問にも同様の問題に実行している人のためにLaracasts

答えて

0

に掲載されている、私は最終的にこの問題に対処するための正しい方法を見つけました。

Laravelパッケージのテストは、Testbenchパッケージが対象です。 documentationから

は、テストベンチのコンポーネントを使用するには、すべてを行う必要がある代わりに PHPUnit\Framework\TestCaseOrchestra\Testbench\TestCaseを拡張しています。

このように、設定値を設定することは、完全なLaravelのインストールと同じようにConfig::set()を呼び出すことです。もはやMockeryの問題はありません。

-1

私は同じ問題に直面しました。ルーメン5.4 を使用すると、Config::set('key', 'value')は使用されませんでした。だから私はこの方法で使用しなければならなかった。

//test 
use Illuminate\Support\Facades\Config; 

Config::shouldReceive('get') 
        ->once() 
        ->with('key') 
        ->andReturn('value'); 

//code 
use Illuminate\Support\Facades\Config; 

Config::get('key'); //instead config('key'); 
+0

あなたの問題は私には関係ありません。 'Illuminate'パッケージのほとんどを持っているLumenを使用しているので、' Config :: set() 'は' bootstrap/app.php'でFacadesを有効にしている限り動作します。私のユースケースは、独立した環境でLaravel/Lumenパッケージをテストするためのものです。あなたが自由にフレームワーク全体を持っていないので、Testbenchに頼らざるを得ません。また、ドキュメントに記載されているように、 'Config'を嘲笑することはベストプラクティスではありません。したがって、downvote。 –

関連する問題