【问题标题】:Laravel 5.6. PHPUnit. Order-insensitive assertJson() method拉拉维尔 5.6。 PHP 单元。顺序不敏感的 assertJson() 方法
【发布时间】:2019-03-24 06:46:57
【问题描述】:

在我的业务逻辑中,我不关心元素的顺序。

这是我的测试示例

$this->getJson('/api/order-attempts')
     ->assertJson([
         'data' => [
             ['status' => 'error'],
             ['status' => 'error'],
             ['status' => 'confirmed'],
             ['status' => 'confirmed'],
             ['status' => 'confirmed'],
         ],
     ])->isOk();

只是因为订单不时失败。我不想对 api 进行排序,因为我不需要它。

是否有可能以某种方式assertJsonIgnoringOrder()

【问题讨论】:

  • 也许 seeJson 适合你
  • assertJsonFragment 在内部进行排序(基本上忽略顺序),但它也匹配部分 JSON 片段,因此它可能适合您,也可能不适合您

标签: php laravel laravel-5 phpunit laravel-testing


【解决方案1】:

您可以使用assertSame()检查json的结构和对齐方式

例如试试这个

 $this->assertSame(json_encode([
     'data' => [
         ['status' => 'error'],
         ['status' => 'error'],
         ['status' => 'confirmed'],
         ['status' => 'confirmed'],
         ['status' => 'confirmed'],
     ]),$response->getContent(), '');

【讨论】:

    【解决方案2】:

    有各种各样的 JSON 断言,您可以从中构建您正在寻找的东西。

    例如,您可以使用 assertJsonFragment() 断言部分 json 或仅断言结构是否正确,使用 assertJsonStructure() 忽略实际内容。

    例如,您可以使用 assertJsonCount($number, $key) 查看 json 是否包含正确数量的元素,键为 status

    不幸的是,没有特定的断言已经符合您的要求,至少默认情况下没有。可能有一些图书馆为您提供它。

    【讨论】:

      猜你喜欢
      • 2018-12-17
      • 2019-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      • 2018-11-01
      相关资源
      最近更新 更多