大佬教程收集整理的这篇文章主要介绍了测试 api 返回 201 而不是 200,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我不明白 API 测试 (laravel 8) 会发生什么。
这个调用(一个非常简单的 put)返回一个响应 200 ,使用 postman。
同样的测试使用phpunit,返回201:
public function testPutOrganizationOk()
{
$organization = Organization::factory()->create();
$superadmin = User::factory()->create([
'organization_ID' => $organization->ID,'role_ID' => 'SUPERadmin'
]);
Sanctum::acTingAs($superadmin);
$organizationToModify = [
'name' => 'mon organization moif','contact' => 'contact name modif','comment' => 'comment comment comment modif','ads_max' => 12345,'state_ID' => 'VALIDATED'
];
$response = $this->putJson($this->getUrl() . '/organizations/' . $organization->ID,$organizationToModify);
$response->assertStatus(200);
}
错误是:
我尝试了很多东西,但都没有成功。我真的不明白会发生什么。任何建议将不胜感激。谢谢。
编辑:我的控制器
public function update(StoreOrganizationrequest $request,Organization $organization)
{
$this->authorize('update',Organization::class);
$organizationupdated = $this->organizationRepository->updateOrganization($organization,$request->only(['name','contact','comment','ads_max','state_ID']));
return new Organizationresource($organizationupdated);
}
7 小时后编辑 ;-)
当我在控制器中将资源的返回替换为简单的 Json 返回时,我在 postman 和 phpunit 之间具有相同的行为。 API 调用收到 200 的更新。
奇怪,是说资源出问题了?
为什么 postman 和 phpunit 之间的行为不同?谁是对的:邮递员还是 phpunit?
http 代码 201,表示创建成功。 看这里developer.mozilla.org
并且您可以通过以下方式自定义标题代码:
return Response::JSon(new Organizationresource($organizationupdated),200);
,
201 状态码表示您刚刚创建了一个实例,并且 200 状态码表示已经存在的实例已经更新
PUT 方法请求将封闭的实体存储在提供的 request-URI 下。如果请求 URI 引用了一个已经存在的资源,则包含的实体应该被视为驻留在源服务器上的实体的修改版本。如果 request-URI 未指向现有资源,并且该 URI 能够被请求的用户代理定义为新资源,则源服务器可以使用该 URI 创建资源。"
我可能错了,但您似乎先创建了实例,然后再尝试修改它
,终于放弃了!
我会用这样的状态代码来写响应:
return (new Organizationresource($organization))->response()->setStatusCode(200);
代替:
return new Organizationresource($organization);
写的时间比较长,但至少我的测试没问题。
以上是大佬教程为你收集整理的测试 api 返回 201 而不是 200全部内容,希望文章能够帮你解决测试 api 返回 201 而不是 200所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。