【发布时间】:2021-08-09 23:56:42
【问题描述】:
我的测试函数是这个
use RefreshDatabase;
public function create_route()
{
$user = \App\Models\User::factory()->create();
$this->actingAs($user)
->post(route('daily-logs.store'), [
'log' => 'Logging from create route test',
'day' => '2020-01-01',
]);
$this->assertDatabaseHas('daily_logs', [
'user_id' => $user->id,
'log' => 'Logging from create route test',
'day' => '2020-01-01 00:00:00',
]);
}
我的路线是这样的:
Route::post('/daily-logs', [DailyLogController::class, 'store'])->name('daily-logs.store');
我的控制器是这样的:
public function store(Request $request)
{
return DailyLog::create([
'user_id'=> $request->user()->id,
'log'=> $request->log,
'day'=> $request->day,
]);
}
如果我使用带有请求发布的浏览器访问我的路由器,则工作已成功完成。但是,如果我正在使用我的测试功能,则会显示一条错误消息。
怎么了?
【问题讨论】:
-
您确定验证通过了吗?要么是这样,要么是
DailyLog的$fillable属性需要更新。 -
是的@cdruc,我在有无验证的情况下进行了测试。
-
嗯...这很奇怪。你在使用
RefreshDatabase特征吗?通过在创建之前放置dd($request->all());来测试它是否甚至会触发控制器操作 - 然后运行测试。 -
@cdruc 我测试了它并没有回答。就好像他没有进入路线一样。但如前所述,路线存在。它可以通过浏览器运行。
-
是的,我使用 RefreshDatabase
标签: php laravel unit-testing testing phpunit