php - 为什么当我运行我的 phpunit 测试时,我得到一个空响应,但 Postman 中的相同路由/用户的行为符合预期?
问题描述
在为 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"
},...
当我 dd($response); 时我在 phpUnit 上得到的输出 “[]”
解决方案
该factory()->make()
方法不在数据库中保存记录。因此,当您在测试中进行 api 调用时,您没有任何用户,因此响应为空。
factory()->create()
用于实际保存记录。因此,只需将您的更改factory()->make()
为factory()->create()
,您应该在您的回复中获得用户。
推荐阅读
- r - 如何在 R 中的多个数据集之间绘制数据方差分布?
- visual-studio-code - 更改 VSC 内花括号的颜色
- elasticsearch - 如何根据elasticsearch中索引字段值(数据)的优先级获取搜索结果
- mysql - 多个 MySQL Workbench 同步问题
- php - Wordpress:“警告:非法字符串偏移”在多个地方
- c# - LINQ OrderBy 然后 SELECT 特定索引
- mongodb - 尽管存在复合索引,但 MongoDB 在 IXSCAN 之前使用过滤器
- django - 错误:来自 django oauth2 服务器的“unsupported_grant_type”
- python - 克隆 Git 存储库后如何避免添加到系统路径
- mysql - 包括与 IN() 子句不匹配的行