我有一张table
public function up()
{
Schema::create('parties', function (Blueprint $table) {
$table->id();
$table->integer('place_id');
$table->tinyInteger('status')->default(0);
$table->dateTime('utc_date');
$table->dateTime('local_date');
$table->timestamps();
});
Schema::table('parties', function (Blueprint $table) {
$table->index('place_id');
$table->foreign('place_id')
->references('id')
->on('places')
->onDelete('restrict');
});
}
模型厂
<?php
/**@var \Illuminate\Database\Eloquent\Factory $factory */
use App\Models\Party;
use Faker\Generator as Faker;
$factory->define(Party::class, function (Faker $faker) {
$date = $faker->dateTimeBetween(now()->subDays(3), now());
return [
'place_id' => $faker->numberBetween(1, 9),
'status' => $faker->numberBetween(0, 3),
'utc_date' => $date,
'local_date' => \Carbon\Carbon::make($date)->addHours(3),
];
});
如果我在homecontroller中调用create方法,它将正常工作
factory(Party::class, 10)->create();
但是当我在测试中调用它时,我犯了一个错误
sqlstate[42703]:未定义的列:7错误:关系“parties”的“utc\u date”列不存在第1行:插入“parties”(“place\u id”,“status”,“utc\u date”,“lo…”(sql:在“双方”(“地点\ id”,“状态”,“utc \日期”,“本地\日期”,“更新\时间”,“创建\时间”)中插入值(5,3,2020-08-04 00:34:52,2020-08-04 03:34:52,2020-08-04 11:42:18,2020-08-04 11:42:18)返回“id”)
<?php
namespace Tests\Feature\API;
use App\User;
use Tests\TestCase;
use Laravel\Sanctum\Sanctum;
use App\Models\{Party, Place};
use Illuminate\Foundation\Testing\RefreshDatabase;
class PartiesControllerTest extends TestCase
{
use RefreshDatabase;
private User $user;
protected function setUp(): void
{
parent::setUp();
$this->user = factory(User::class)->create();
}
public function test_get_parties()
{
factory(Party::class)->create([
'place_id' => factory(Place::class)->create()->id,
]);
dd(Party::all());
Sanctum::actingAs($this->user);
}
}
3条答案
按热度按时间k97glaaz1#
我正在使用第二个数据库进行测试。我连接到此数据库,发现此表尚未刷新。我不知道为什么,因为我用了。为了解决这个问题,我手动添加了这个字段。
pb3s4cty2#
试着跑
php artisan migrate:fresh
. 如果您使用另一个数据库进行测试并使用另一个.env
然后尝试运行php artisan migrate:fresh --env=testing
. 例如:可以使用文件env.testing
以及APP_ENV=testing
在这个文件里。可能您后来添加了此字段,但没有刷新数据库。另外,检查visualdb中是否存在该字段。如果没有帮助,试着逃跑
composer dump-autoload
然后重试。njthzxwz3#
请确保模型中的可填充数组具有此键,
试着用碳来代替伪造日期