Тестирование Laravel: assertJsonFragment завершается неудачей, если необходимо проверить несколько уровней - PullRequest
0 голосов
/ 29 мая 2018

Это ответ:

[  
  {  
    "data":{  
      "locales":{  
        "translate":[  
          {  
            "created_at":"2018-05-28 12:49:53",
            "deleted_at":null,
            "id":1,
            "key":"nl_NL",
            "name":"Netherlands (Nederlands)",
            "updated_at":"2018-05-28 12:49:53"
          }
        ],
        "validate":[  
          {  
            "created_at":"2018-05-28 12:49:53",
            "deleted_at":null,
            "id":2,
            "key":"it_IT",
            "name":"Italian (Italiano)",
            "updated_at":"2018-05-28 12:49:53"
          }
        ]
      }
    },
    "error":false,
    "message":null
  }
]

Я хочу заявить, что следующие фрагменты являются частью ответа:

1) ['translate' => [['key' => 'nl_NL']]]
2) ['validate'  => [['key' => 'it_IT']]]

Есть ли способ утверждать, что translate массив содержит хотя бы элемент с ключом nl_NL, а validate содержит элемент с ключом it_IT?

$response->assertSuccessful()->assertJsonFragment([
    'translate' => [['key' => 'nl_NL']],
    'validate'  => [['key' => 'it_IT']
]);

1 Ответ

0 голосов
/ 31 мая 2018

Это невозможно с assertJsonFragment().

. Вы можете сделать что-то вроде этого:

$this->assertTrue(
    collect($response->decodeResponseJson('0.data.locales.translate'))
        ->pluck('key')->contains('nl_NL')
);
...