【发布时间】:2021-06-07 02:02:11
【问题描述】:
我不明白 API 测试 (laravel 8) 会发生什么。
这个调用(一个非常简单的 put)返回一个响应 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);
}
错误是:
- 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?
【问题讨论】:
-
putJson 而不是 put :)
-
我尝试了很多东西:$this->json('PUT'....,还有 $this->put,还有 $this->putJson。每次我都有相同的 201 而不是 200。但感谢您的帮助。
-
在您的组织控制器中,尝试指定响应代码?
-
请出示您的控制器代码。你在使用
Resource类吗? -
我刚刚阅读了这个主题laraveldaily.com/…,它解释说:注意,如果我们不指定返回的状态码,Laravel 会自动为我们做,这可能是不正确的.因此建议尽可能指定代码。
标签: laravel