2016-11-17 4 views
5

장바구니에 대한 테스트 클래스를 작성하려고합니다. 내가 phpunit을 실행할 때 Laravel 내 ShoppingCartClass를 해결할 수없는처럼Laravel Unit Testing Dependency Injection

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

} 

그러나, 그것은 보인다

ShoppingCartTest.php을 : 여기에 내가 가진 것입니다. 내 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

쿨 - 고마워! 모든 Laravel 테스트는 속성으로 사용할 수있는 애플리케이션의 인스턴스를 가지고 있으므로'$ this-> app-> make ('App \ Classes \ Billing \ ShoppingCart');를 사용해 볼 수 있습니다. – 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 함수를 사용해야합니다.