2016-11-17 21 views
5

Próbuję napisać test klasy dla koszyka. Oto co mam:Laravel Unit Testing Dependency Injection

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); 
    } 

} 

Jednak, gdy biegnę PHPUnit, wydaje się laravel nie jest w stanie rozwiązać moje ShoppingCartClass.

Tutaj jest błąd:

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 

Mam klasa ShoppingCart być rozwiązany w szereg różnych kontrolerów dobrze.

Dlaczego Laravel nie może rozwiązać problemu podczas moich testów?

Ja także odwołałem do this post, ale wciąż nie miałem szczęścia.

+0

Czy mógłbyś opublikować konstruktor dla 'App \ Classes \ Billing \ ShoppingCart'? – edcs

+0

@edcs Pewna rzecz. Oto klasa. http://pastebin.com/bPRpmtnH –

+2

Fajnie - dzięki! Możesz spróbować użyć '$ this-> app-> make ('App \ Classes \ Billing \ ShoppingCart');' ponieważ wszystkie testy Laravel mają instancję aplikacji dostępną dla nich jako własność. – edcs

Odpowiedz

8

Wymyśliłem to. Oto zaktualizowana klasa.

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); 
    } 

} 

Dzięki @edcs za kierowanie mną we właściwym kierunku. Należy użyć funkcji setUp, a nie __construct, ponieważ instancja app nie została jeszcze utworzona.

Powiązane problemy