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

unable to get error from SeeJson unit test

我有一个检查 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 盒子上的那个错误是什么,而不是在本地。

有没有办法让它在失败时输出响应包含的内容?

由于 JSON 响应中的格式错误,您通常会收到此错误。 请记住,您的测试正在等待有效的 JSON 响应,因此在这种情况下,这就是您需要解决的问题。

  1. 你能上传一些你的控制器代码吗?因为那是 JSON 的来源。
  2. 检查 storage/logs/framework 下的框架日志(如果文件很大,我建议删除它并再次 运行 请求,您将首先记录错误)

当测试框架未能提供任何体面的指示时,我总是觉得很烦人 它看到了什么 当它没有看到我告诉它期望的东西时。除了围绕断言包装一个 try...catch...report...rethrow 之外,我知道没有合适的方法让 MakesHttpRequests 特征仅在测试失败时吐出它看到的内容。

但是,要调试它,您可以继续这样做,并使用 $this->response 查看响应中的内容。