无法从SeeJson单元测试中获得错误

时间:2016-07-26 21:47:04

标签: laravel phpunit

我有一个测试,检查api是否有json响应

   public function test_search_get_place_details()
    {
           $this->post('/api/searchVenue', ['placeId' => 'ChIJXZE0JMLeekgR2meph0M9Jm41221212112']);
             $this->SeeJson([
                 'Town' => 'Birkenhead',
             ]);
    }

此测试正常工作并断言,但当它失败时,我得到的只是

Time: 1.42 seconds, Memory: 27.00MB

There was 1 error:

1) SearchTest::test_search_get_place_details
ErrorException: Invalid argument supplied for foreach()

/home/ubuntu/workspace/vendor/laravel/framework/src/Illuminate/Support/Arr.php:494
/home/ubuntu/workspace/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:232
/home/ubuntu/workspace/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:257
/home/ubuntu/workspace/tests/SearchTest.php:41

我认为这是因为响应是典型的laravel错误而不是json。但是我需要知道我的CI盒子上发生了什么错误,而不是本地。

无论如何都要让它输出失败时响应包含的内容?

2 个答案:

答案 0 :(得分:2)

当测试框架未能提供任何正确的指示时,我总觉得很烦人,因为当它没有看到我告诉它的预期时,它看到了什么。除了包装一个try ... catch ...报告...重新抛出断言之外,我知道没有合适的方法可以让$this->response特征只在测试失败时吐出它所看到的内容。

但是,要调试它,您可以继续执行此操作,并使用include()查看响应中的内容。

答案 1 :(得分:1)

由于JSON响应中的格式错误,通常会出现此错误。 请记住,您的测试正在等待有效的JSON响应,因此在这种情况下您需要修复它。

  1. 您可以上传部分控制器代码吗?正如JSON即将到来的那样。
  2. 检查存储/日志/框架下的框架日志(如果文件太大,我建议删除它并再次运行请求,您将首先记录错误)