我是Laravel新手。我有2个表Productions和Products。另外,我有2个工厂ProductionFactory和ProductFactory。我想通过phpunit测试它们。它们的连接是通过production_id进行的。
错误是ErrorException:未定义的变量:生产。
我不明白。
谢谢。
这是一个代码。
ProductionFactory.php
$factory->define(App\Production::class, function (Faker $faker) {
return [
'name' =>$faker->name,
];
});
ProductFactory.php
$factory->define(App\Product::class, function (Faker $faker) {
$production_id = App\Production::pluck('id');
if(!$production_id->isEmpty()){
$production = $production_id->random();
}
return [
'id' =>$faker->uuid,
'name' =>$faker->name,
'price' => $faker->numberBetween($min = 100, $max = 900),
'description' =>Str::random(10),
'production_id'=> $production,
];
ProductionTest.php
class ProductionTest extends TestCase
{
use RefreshDatabase;
/**
* A basic unit test example.
* @test
* @return void
*/
public function production()
{
factory(Production::class)->make();
$this->assertTrue(true);
}
}
ProductTest.php
class ProductTest extends TestCase
{
use RefreshDatabase;
/**
* A basic unit test example.
* @test
* @return void
*/
public function product()
{
factory(Product::class)->make();
$this->assertTrue(true);
}
}
答案 0 :(得分:0)
这取决于应测试的功能。
检查模型关系的基本测试是否正确设置?
我将工作示例推送到GitHub (https://github.com/.../laravel-basic-relationship-tests)。
App / Product.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
public function production()
{
return $this->belongsTo(Production::class);
}
}
App / Production.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Production extends Model
{
public function products()
{
return $this->belongsTo(Product::class);
}
}
产品工厂
<?php
/* @var $factory \Illuminate\Database\Eloquent\Factory */
use App\Product as Model;
use Faker\Generator as Faker;
$factory->define(Model::class, function (Faker $faker) {
return [
'name' => $faker->name,
'price' => $faker->numberBetween($min = 100, $max = 900),
'description' => $faker->text,
];
});
$factory->afterCreatingState(Model::class, 'seed', function ($product, $faker) {
$production = factory(\App\Production::class)->make();
$product->production()->associate($production);
});
生产工厂
<?php
/* @var $factory \Illuminate\Database\Eloquent\Factory */
use App\Production as Model;
use Faker\Generator as Faker;
$factory->define(Model::class, function (Faker $faker) {
return [
'name' => $faker->name
];
});
$factory->afterCreatingState(Model::class, 'seed', function ($production, $faker) {
$product = factory(\App\Product::class)->make();
$production->products()->associate($product);
});
产品测试
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ProductTest extends TestCase
{
/**
* @return void
*/
public function testProductHasWorkingProductionRelationship()
{
$product = factory(\App\Product::class)->state('seed')->create();
$this->assertNotEmpty($product->production);
}
}
生产测试
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ProductionTest extends TestCase
{
/**
* @return void
*/
public function testProductionHasWorkingProductRelationship()
{
$production = factory(\App\Production::class)->state('seed')->create();
$this->assertNotEmpty($production->products);
}
}
希望这是进行进一步测试的一个很好的起点。
答案 1 :(得分:0)
模型制作
use Illuminate\Database\Eloquent\SoftDeletes;
class Production extends Model
{
use SoftDeletes;
protected $fillable = [
'name',
];
public function products()
{
return $this->hasMany('App\Product');
}
模型产品
class Product extends Model
{
use SoftDeletes;
protected $fillable = [
'id','name','price','description','production_id'
];
public function production()
{
return $this->belongsTo('App\Production');
}
SQLSTATE [HY000]:常规错误:1364字段'production_id'没有默认值