Pregunta Laravel Unit Testing Dependency Injection


Estoy tratando de escribir una clase de prueba para un carrito de compras. Esto es lo que tengo:

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

}

Sin embargo, cuando ejecuto phpunit, parece que Laravel no puede resolver mi ShoppingCartClass.

Aquí está el error:

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

Tengo mi clase de ShoppingCart que se resuelve en una serie de diferentes controladores muy bien.

¿Por qué Laravel no puede resolverlo durante mis pruebas?

Yo hice referencia a esta publicación También, pero todavía no tuvo suerte.


5
2017-11-17 14:27


origen


Respuestas:


Me lo imaginé. Aquí está la clase actualizada.

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

}

Gracias a @edcs Por guiarme en la dirección correcta. Necesitas usar una función de configuración y no __construct como el app La instancia aún no ha sido creada.


12
2017-11-17 17:16