奇怪的assertJSON行为

时间:2019-03-17 13:09:54

标签: laravel unit-testing laravel-testing laravel-5.8

我想测试AJAX响应是否包含我期望的数组。
到目前为止,还算不错,
这就是我的数组的样子:

array (
  'data' => 
  array (
    0 => 
    array (
      'key1' => 'value1',
      'key2' => 'value2,
    ),
    1 => 
    array (
      'key1' => 'value3',
      'key2' => "value4",
    ),
  ),
)

运行测试时:

$request->assertJson([the array mentioned above]);

该数组确实看起来像这样,但是无论如何它都会失败。为什么? 因为实际上它期望数组两次。
在比较窗口中,我看到它期望这样:

array (
  'data' => 
  array (
    0 => 
    array (
          'key1' => 'value1',
          'key2' => 'value2,
    ),
    1 => 
    array (
          'key1' => 'value3',
          'key2' => "value4",
    ),
  ),
  0 => 
  array (
          'key1' => 'value1',
          'key2' => 'value2,
  ),
  1 => 
  array (
          'key1' => 'value3',
          'key2' => "value4",
  ),
)

但是得到了上面提到的数组(这也是我所期望的)。

当我运行$request->assertJSON([]);时,测试成功了,但这不是它应该工作的方式吗?

1 个答案:

答案 0 :(得分:0)

这不是一个真正的答案(就解决潜在问题而言),但是由于我认为这是一个错误,因此我也想与遇到此问题的人分享解决方法:
很简单只需将json存储到变量$array = $request->json()中(假设响应已保存到$request变量中。
然后测试包含的数组。
$this->assertEquals(EXPECTED_DATA, ARRAY_TO_TEST)