Laravel 5.4 Unit Test – Llamada a una conexión de función miembro () en null

Traté de crear una prueba unitaria para las relaciones entre mis modelos de User y Shop , sin embargo, cuando ejecuto vendor\\bin\\phpunit este error (s) se vendor\\bin\\phpunit , no tengo idea de esto ya que soy un novato en pruebas unitarias . Traté de ejecutar mi código en mi controlador para ver si la relación realmente funciona, y afortunadamente está funcionando como se esperaba, pero no cuando se ejecuta en phpunit. ¿Qué he hecho mal para que este phpunit no funcione con Models?

Error grave: Error no detectado: llamada a una conexión de función miembro () en nulo en E: \ projects \ try \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Model.php: 1013

Stack trace: E: \ projects \ try \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Model.php (979): Illuminate \ Database \ Eloquent \ Model :: resolveConnection (NULL) E: \ projects \ try \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Model.php (843): Illuminate \ Database \ Eloquent \ Model-> getConnection () E: \ projects \ try \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Model.php (804): Illuminate \ Database \ Eloquent \ Model-> newBaseQueryBuilder () E: \ projects \ try \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Model.php (788 ): Illuminate \ Database \ Eloquent \ Model-> newQueryWithoutScopes () E: \ projects \ try \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Model.php (1316): Illuminate \ Database \ Eloquent \ Model- > newQuery () E: \ projects \ try \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Model.php (1328): Illum en E: \ projects \ try \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Model.php en la línea 1013

Este es mi UserTest.php

 setUp(); } function setUp() { $user = new User([ 'id' => 1, 'first_name' => 'John', 'last_name' => 'Doe', 'email' => 'JohnDoe@example.com', 'password' => 'secret', 'facebook_id' => null, 'type' => 'customer', 'confirmation_code' => null, 'newsletter_subscription' => 0, 'last_online' => null, 'telephone' => null, 'mobile' => null, 'social_security_id' => null, 'address_1' => null, 'address_2' => null, 'city' => null, 'zip_code' => null, 'signed_agreement' => 0, 'is_email_confirmed' => 0 ]); $user = User::find(1); $shop = new Shop([ 'id' => 1, 'user_id' => $user->id, 'name' => 'PureFoods Hotdog2', 'description' => 'Something that describes this shop', 'url' => null, 'currency' => 'USD' ]); $user->shops()->save($shop); $shop = new Shop([ 'id' => 2, 'user_id' => $user->id, 'name' => 'PureFoods Hotdog', 'description' => 'Something that describes this shop', 'url' => null, 'currency' => 'USD' ]); $user->shops()->save($shop); $this->user = $user; } /** @test */ public function a_user_has_an_id(){ $user = User::find(1); $this->assertEquals(1, $user->id); } /** @test */ public function a_user_has_a_first_name(){ $this->assertEquals("John", $this->user->first_name); } /** @test */ public function a_user_can_own_multiple_shops(){ $shops = User::find(1)->shops()->get(); var_dump($this->shops); $this->assertCount(2, $shops); } } 

Parece que este error es causado por esta línea de código: $user->shops()->save($shop); – Este código realmente funciona cuando se ejecuta en mis rutas de muestra o en el Controlador pero arroja errors cuando se ejecuta en phpunit

User.php

 hasMany('App\Shop'); } } 

Shop.php

 belongsTo('App\User'); } } 

Cualquier ayuda será muy apreciada. ¡Gracias!

Solutions Collecting From Web of "Laravel 5.4 Unit Test – Llamada a una conexión de función miembro () en null"

En primer lugar, se llama a setUp () antes de cada prueba, por lo que no debe llamarlo desde el constructor

En segundo lugar, debe llamar a parent :: setUp () en su setUp () para inicializar la instancia de la aplicación.

Ejemplo:

 < ?php class ExampleTest extends TestCase { private $user; public function setUp() { parent::setUp(); $this->user = \App\User::first(); } public function testExample() { $this->assertEquals('victor@castrocontreras.com', $this->user->email); } } 

Está asignando el id ‘2’ a ambas tiendas.

La asignación no debería ser necesaria ya que supongo que el campo de Id. De la tabla de la tienda es un campo de autoincrementación.

También busque fábricas de bases de datos en los documentos de Laravel , simplificará las cosas para usted.