程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了测试 api 返回 201 而不是 200大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决测试 api 返回 201 而不是 200?

开发过程中遇到测试 api 返回 201 而不是 200的问题如何解决?下面主要结合日常开发的经验,给出你关于测试 api 返回 201 而不是 200的解决方法建议,希望对你解决测试 api 返回 201 而不是 200有所启发或帮助;

我不明白 API 测试 (laravel 8) 会发生什么。

这个调用(一个非常简单的 put)返回一个响应 200 ,使用 postman。

测试 api 返回 201 而不是 200

同样的测试使用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);
}

错误是:

  1. Tests\Feature\OrganizationTest::testPutOrganizationOk 预期状态代码 200,但收到 201。断言 200 失败 与 201 相同。

我尝试了很多东西,但都没有成功。我真的不明白会发生什么。任何建议将不胜感激。谢谢。

编辑:我的控制器

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,请注明来意。