我正在做一个TDD项目,我只是想确保密码不会被错误地返回.这是我写的试卷.

public function testInfoMethodJsonStructure(){
    $user = User::factory()->create();

    $response =
        $this
            ->actingAs($user)
            ->get('/api/profile/info');

    $response->assertStatus(200);

    $response->assertJsonStructure(['name', 'fullname', 'email']);

    $response->assertJsonMissing(['password']); // this passes.
    $response->assertJsonMissing(['password' => $user->password]); // this does not pass.
}

我知道密码正在返回,但为什么当我只传递密钥时,assertJsonMissing就不起作用了?如果不使用它,那么判断数据密钥是否丢失的正确方法是什么?

推荐答案

assertJsonMissing(array $data)试图在您返回的json中找到$data.

assertJsonMissing(['password'])assertJsonMissing(['password' => 'something'])之间的区别如下:

  • 如果返回的json是对象,则assertJsonMissing(['password'])会try 在json中查找{"0": "password"}.
  • assertJsonMissing(['password' => 'something'])try 在返回的json对象中查找{"password": "something"}.

这里有几个替代方案.

  • assertJsonMissingPath('password').
  • 流畅的json断言.
$response
    ->assertJson(fn (AssertableJson $json) =>
        $json->hasAll(['name', 'fullname', 'email'])
            ->missing('password')
    );

Php相关问答推荐

在AJX请求中使用简写后,FormData出现非法调用错误

在Laravel中,如果我用session—put()存储一些信息,客户端浏览器是否可以使用这些信息?>

将部分产品排除在WooCommerce的计算附加费之外

如何从该字符串中删除这些图标转换的ASCII问号字符?

如何使用索引加速和优化MySQL搜索

升级到PHP 8.2后无法删除cURL Cookie文件

调用模型[App\Models\Employee]上未定义的关系[title]

既然setSQLLogger()已被弃用,如何使用中间件在 Doctrine 3 中记录查询执行时间?

invalid_grant 和无效的 JWT 签名

将 PHP 版本更改为 8.1,但 WordPress 认为我们正在使用版本 7.4?

使用 Spomky Labs JWT 框架中的 verifyWithKey 验证 id_token JWT 的签名需要 30 秒以上

Firefox 115 会话行为:为什么页面无法找到要加载的现有会话 ID?

注册命名空间后如何获取xml node 值?

URL中包含"&"与DirectoryIterator不兼容

如何在自定义消息中包含 WooCommerce 选定的产品变体详细信息

如何从 PHP 中的 .txt 文件中列出今天生日的人的姓名?

如何使用 WhatsApp Cloud API 向 WhatsApp 发送消息,而无需在发送消息之前注册收件人号码?

为什么非贪婪匹配会消耗整个模式,即使后面跟着另一个非贪婪匹配

根据数组中的文本文件编号显示星级

如何简化 php API 中的格式化数组列表数据以提供 React Native 部分列表