Laravel的TestCase方法seeJson()只查找数组

时间:2015-08-28 17:09:42

标签: php json unit-testing laravel-5.1

我使用的是Laravel 5.1 Testsuite。

现在,我用方法seeJson()测试我的json api。此方法需要一个数组,例如:

->seeJson(['created' => 1]);

但我的json api总是返回一个 json对象或带有json对象的数组,在这种情况下:

Response::json(['created' => 1], 200);

在上面的例子中,我的json api返回:

{created: 1}

但是seeJson()正好查找给定的数组:

[created: 1]

我从来没有通过匹配传递我的测试。我该怎么匹配?​​

3 个答案:

答案 0 :(得分:3)

我收到了类似的错误。

  

无法在[{“created”:“1”}中找到JSON片段[“created”:1] ......]

查看源代码,该错误写为:

"Unable to find JSON fragment [{$expected}] within [{$actual}]."

因此[ ]未包含在搜索

Response::json(['created' => 1], 200);

导致:     {"created":1}

当我在seeJson()方法中转储响应内容时,所有值都在引号中。尝试将测试更改为:

->seeJson(['created' => '1']);

答案 1 :(得分:3)

seeJson进行严格的比较,所以:

'created' => 1 (Interpreted as integer)

将失败,因为您的API返回的JSON实际上是

"created":"1" (interpreted as string)

答案 2 :(得分:-3)

请使用这样的json。

->seeJson((object)['created' => 1]);