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

如何使用phpunit测试JsonArray中的随机值,php,json,laravel,laravel-5,phpunit,Php,Json,Laravel,Laravel 5,Phpunit,大家好,我正在测试API并从响应中获取特定的json元素,下面是API的响应: { "Error": null, "Data": { "AuthToken": "jaskdfjlsadkfjasd", "InactiveTimeout": 20 } } 由于AuthToken的值始终是随机的,因此我无法使用以下代码对其进行测试: $this->post('/login', [ 'id'=>'1', 'password'=&

大家好,我正在测试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)
       ]);
我尝试过使用以下代码:

$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)
       ]);
但是我不能通过测试,我的问题是如何为这个案例编写测试?
谢谢您的帮助。

您可以尝试以下代码:

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

您可以尝试以下代码:

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

使用PHPUnit可以做的一件事是将使用数组的值与
assertArraySubset
进行比较。通过这种方式,您可以比较一个数组是否在另一个数组中。也许您可以尝试使用
seeJson
查看
Error
seeJsonStructure
查看
AuthToken
@i906。是的,使用您的建议就可以了,谢谢,但是有没有更干净的方法来实现这一点?如果没有,那么我需要为这种响应编写两个测试。使用PHPUnit可以做的一件事是使用数组与
assertArraySubset
比较值。通过这种方式,您可以比较一个数组是否在另一个数组中。也许您可以尝试使用
seeJson
查看
Error
seeJsonStructure
查看
AuthToken
@i906。是的,使用您的建议就可以了,谢谢,但是有没有更干净的方法来实现这一点?如果不是,那么我需要为这种响应编写两个测试