Laravel Phpunit测试基于请求获取给定输出的请求
我对laravel还是个新手,我有一个简单的应用程序和aSo,我有一个路由,可以根据请求在控制器中存储数据Laravel Phpunit测试基于请求获取给定输出的请求,laravel,unit-testing,phpunit,Laravel,Unit Testing,Phpunit,我对laravel还是个新手,我有一个简单的应用程序和aSo,我有一个路由,可以根据请求在控制器中存储数据 public funtion store(Request $request, $id){ if ($request->has('work_experiences')) { WorkExperience::create([ 'user_id' => $user->id,
public funtion store(Request $request, $id){
if ($request->has('work_experiences')) {
WorkExperience::create([
'user_id' => $user->id,
'position' => $request->work_experiences['position'],
'company' => $request->work_experiences['company'],
'start_date' => $request->work_experiences['start_date'],
'end_date' => $request->work_experiences['end_date'],
]);
}
if ($request->has('education')) {
Education::create([
'user_id' => $user->id,
'degree' => $request->education['degree'],
'university' => $request->education['university'],
'start_date' => $request->education['start_date'],
'end_date' => $request->education['end_date'],
]);
}
if ($request->has('job_interests')) {
JobInterest::create([
'user_id' => $user->id,
'job_position' => $request->job_interests['position'],
]);
}}
}
在我的测试中
public function test_authenticated_user_can_edit_education_profile()
{
$this->withoutExceptionHandling();
$user = User::factory()->create();
$this->actingAs($user);
$response = $this->post('/candidate' . '/' . $user->id, [
'user_id' => $user->id,
'position' => 'position',
'company' => 'company',
'start_date' => Carbon::now(),
'end_date' => Carbon::now(),
]);
$this->assertCount(1, WorkExperience::all());
}
当我运行测试时,assertCount似乎失败了,因为响应不起作用/将数据插入数据库。我哪里做错了?嗯,测试是对的 它应该会失败,因为您的请求数据中没有
工作经验
密钥
测试请求应该如下所示:
$response=$this->post(“/candidate”“/”。$user->id[
“工作经验”=>[
'user_id'=>$user->id,
“位置”=>“位置”,
“公司”=>“公司”,
“开始日期”=>碳::现在(),
“结束日期”=>碳::现在(),
]
]);
因此,您的数据应该放在work\u experiences
键下,$request->has('work\u experiences')
返回true并执行WorkExperience::create()
语句
目前,您的端点只允许创建一个“工作体验”。鉴于您已将其命名为
工作经验
,我假设您希望传入“工作经验”的数组/集合,但这在当前的实现中不起作用;您将不得不在其上循环-类似于以下内容:
if ($request->has('work_experiences')) {
foreach ($request->input('work_experiences') as $experience) {
WorkExperience::create([
'user_id' => $request->user()->id,
'position' => $experience['position'],
'company' => $experience['company'],
'start_date' => $experience['start_date'],
'end_date' => $experience['end_date'],
]);
}
}
然后你的测试应该是这样的:
if ($request->has('work_experiences')) {
foreach ($request->input('work_experiences') as $experience) {
WorkExperience::create([
'user_id' => $request->user()->id,
'position' => $experience['position'],
'company' => $experience['company'],
'start_date' => $experience['start_date'],
'end_date' => $experience['end_date'],
]);
}
}
$response=$this->post(“/candidate”“/”。$user->id[
“工作经验”=>[
[
'user_id'=>$user->id,
“位置”=>“位置”,
“公司”=>“公司”,
“开始日期”=>碳::现在(),
“结束日期”=>碳::现在(),
],
//更多“工作经验”
]
]);