为啥当我运行我的 phpunit 测试时,我得到一个空响应,但 Postman 中的相同路由/用户的行为符合预期?
Posted
技术标签:
【中文标题】为啥当我运行我的 phpunit 测试时,我得到一个空响应,但 Postman 中的相同路由/用户的行为符合预期?【英文标题】:Why when I run my phpunit test I get an empty response but the same route/user in Postman behaves as expected?为什么当我运行我的 phpunit 测试时,我得到一个空响应,但 Postman 中的相同路由/用户的行为符合预期? 【发布时间】:2019-05-22 08:50:00 【问题描述】:在编写 API 测试时,路由 api/users 应该返回用户列表。 在 Postman 中正常工作,但在我的 phpunit 测试中返回状态 200,但响应为空,因此 assertJsonStructure() 失败。
我为 Postman 和 phpUnit 使用了相同的用户名/密码。 我添加了 dd() 试图调试响应并获得一个空的正文。
测试
/** @test */
public function testUserCanListUsers()
┆ $user = factory(User::class)->make();
┆ \Auth::loginUsingId($user);
┆ $response = $this->actingAs($user)
┆ ┆ ->get('api/users')
┆ ┆ ->assertStatus(200);
| dd($response->getContent());
┆ $response->assertJsonStructure([
┆ ┆ "id",
┆ ┆ "name",
┆ ┆ "email",
┆ ┆ "email_verified_at",
┆ ┆ "created_at",
┆ ┆ "updated_at",
┆ ]);
我在 Postman 上得到的预期输出
[
"id": 1,
"name": "Dr. Frederic Klein",
"email": "vanessa.jacobi@example.org",
"email_verified_at": "2018-10-31 20:03:52",
"created_at": "2018-10-31 20:03:52",
"updated_at": "2018-10-31 20:03:52"
,
"id": 2,
"name": "Prof. Alyce Considine",
"email": "florence72@example.net",
"email_verified_at": "2018-10-31 20:03:52",
"created_at": "2018-10-31 20:03:52",
"updated_at": "2018-10-31 20:03:52"
,
"id": 3,
"name": "Miss Jermaine Johns PhD",
"email": "kenyon.stehr@example.net",
"email_verified_at": "2018-10-31 20:03:52",
"created_at": "2018-10-31 20:03:52",
"updated_at": "2018-10-31 20:03:52"
,...
我在 phpUnit 上得到的输出 当我 dd($response); “[]”
【问题讨论】:
【参考方案1】:factory()->make()
方法不会在数据库中保存记录。因此,当您在测试中进行 api 调用时,您没有任何用户,因此响应为空。
factory()->create()
用于实际保存记录。因此,只需将您的 factory()->make()
更改为 factory()->create()
,您就会在回复中获得用户。
【讨论】:
谢谢。你是对的,这是一个愚蠢的错误。code
Sebastian Bergmann 和贡献者的 PHPUnit 7.4.3。 "["id":1,"name":"Rhianna Terry","email":"abdullah40@example.com","email_verified_at":"2018-12-23 01:29:09","created_at" :"2018-12-23 01:29:09","updated_at":"2018-12-23 01:29:09"]" code
这是我的转储的预期输出。现在我无法验证 json,但那是另一回事;)。以上是关于为啥当我运行我的 phpunit 测试时,我得到一个空响应,但 Postman 中的相同路由/用户的行为符合预期?的主要内容,如果未能解决你的问题,请参考以下文章
phpunit 测试返回 302 验证错误,为啥不返回 422
在单独的进程中运行测试时,PHPUnit 无法生成代码覆盖率
在 Laravel 8 中运行多个 PHPUnit 测试时出错