2016-11-17 5 views
5

私はショッピングカート用のテストクラスを作成しようとしています。ここで私が持っているものです:私はPHPUnitのを実行するとLaravelは私ShoppingCartClassを解決することができませんようにラーベルユニットテスト依存性注入

ShoppingCartTest.php

class ShoppingCartTest extends TestCase { 

    use DatabaseTransactions; 

    protected $shoppingCart; 

    public function __construct() { 
     $this->shoppingCart = resolve('App\Classes\Billing\ShoppingCart'); 
    } 

    /** @test */ 
    public function a_product_can_be_added_to_and_retrieved_from_the_shopping_cart() { 

     // just a placeholder at the moment 
     $this->assertTrue(true); 
    } 

} 

しかし、それはそうです。私は私のShoppingCartクラスがうまく異なるコントローラの数で解決されている

Fatal error: Uncaught exception 'Illuminate\Contracts\Container\BindingResolutionException' 
with message 'Unresolvable dependency resolving 
[Parameter #0 [ <required> $app ]] in class Illuminate\Support\Manager' 
in C:\Development Server\EasyPHP-Devserver-16.1\eds-www\nrponline\vendor\laravel\framework\src\Illuminate\Container\Container.php:850 

:ここ

はエラーです。

テスト中にLaravelで解決できないのはなぜですか?

this postにも言及しましたが、まだ運がありませんでした。

+0

'App \ Classes \ Billing \ ShoppingCart'のコンストラクタを投稿できますか? – edcs

+0

@edcs確かです。ここにクラスがあります。 http://pastebin.com/bPRpmtnH –

+2

クール - ありがとう! '$ this-> app-> make( 'App \ Classes \ Billing \ ShoppingCart');を使って試してみることができます。すべてのLaravelテストでは、アプリケーションのインスタンスがプロパティとして利用できます。 – edcs

答えて

8

私はそれを理解しました。ここに更新されたクラスがあります。正しい方向に私を案内する@edcs

class ShoppingCartTest extends TestCase { 

    use DatabaseTransactions; 

    protected $shoppingCart; 

    public function setUp() { 

     parent::setUp(); 

     $this->shoppingCart = $this->app->make('App\Classes\Billing\ShoppingCart'); 
    } 

    /** @test */ 
    public function a_product_can_be_added_to_and_retrieved_from_the_shopping_cart() { 

     // just a placeholder at the moment 
     $this->assertTrue(true); 
    } 

} 

感謝。 appインスタンスがまだ作成されていないため、setUp関数を使用し、__constructではなく、使用する必要があります。