如何使用 phpunit 测试 JsonArray 中的随机值

Posted

技术标签:

【中文标题】如何使用 phpunit 测试 JsonArray 中的随机值【英文标题】:How to test random value in JsonArray using phpunit 【发布时间】:2016-11-15 11:18:15 【问题描述】:

大家好,我正在尝试测试 API 并从响应中获取特定的 json 元素,这是来自 API 的响应:


  "Error": null,
  "Data": 
    "AuthToken": "jaskdfjlsadkfjasd",
    "InactiveTimeout": 20
  

由于 AuthToken 的值总是随机的,我无法使用此代码对其进行测试:

$this->post('/login',
    [
      'id'=>'1',
      'password'=>'secret',
    ])->seeJson([
      "Error" => null,
      'Data'=>array(
        'AuthToken'=>'',
        'InactiveTimeout'=>20)
       ]);

我已经尝试使用此代码:

$this->post('/login',
    [
      'id'=>'1',
      'password'=>'secret',
    ])->seeJson([
      "Error" => null,
      'Data'=>array(
        'InactiveTimeout'=>20)
       ]);

但我无法通过测试,我的问题是如何为这种情况编写测试? 感谢您的帮助。

【问题讨论】:

我会使用 phpUnit 做的一件事是将使用数组的值与 assertArraySubset 进行比较。看到这个link 这样,你可以比较一个数组是否在另一个数组中。 也许您可以尝试将seeJson 用于ErrorseeJsonStructure 用于AuthToken @i906 是的,使用您的建议可以解决问题,谢谢,但是有没有更干净的方法来实现这一点?如果没有,那么我需要为这种响应编写两个测试 【参考方案1】:

你可以试试下面的代码:

$this->post('/login', [
        'id' => '1',
        'password' => 'secret',
    ])
    ->seeJson([
        'Error' => null
    ])
    ->seeJsonStructure([
        'Data' => [
            'AuthToken'
        ]
    ]);

【讨论】:

以上是关于如何使用 phpunit 测试 JsonArray 中的随机值的主要内容,如果未能解决你的问题,请参考以下文章

如何跳过 PHPunit 中的测试?

如何让 PHPUnit 运行所有的测试?

如何使用 laravel 和 phpunit 测试文件上传?

如何使用返回 IP 的函数进行 PHPUnit 测试?

如何运行我所有的 PHPUnit 测试?

如何在 windows(cmd) 上使用 composer 运行 phpunit 测试 [重复]