UnitTest Slim的错误处理程序响应

时间:2016-03-07 05:48:29

标签: php unit-testing phpunit slim

我正在使用Slim PHP v3开发一个API服务,我正在尝试使用PHPUNIT对我的开发进行单元测试。

我在控制器(UserController)中有以下内容映射到Slim

中的路由
try {
          $model = $this->model->findOrFail($args['id']);
          $response->write($model);
        } catch (ModelNotFoundException $e) {
          throw new \Exception($e->getMessage());
        }


        return $response;

Slim将“处理错误”并返回500状态代码(在浏览器中执行时有效)

现在我有以下测试(UsersTest)......

protected function request($method, $url, array $requestParameters = [])
    {
        ob_start();
        $request = $this->prepareRequest($method, $url, $requestParameters);
        $response = new Response();
        $app = $this->app;
        $this->response = $app($request, $response);
        return ob_get_clean();
    }
    function testGetUserFail()
        {

            $response = $this->request('GET','/users/1',[]);
            $this->assertThatResponseHasStatus(500, print_r($this->responseData(), true)); // does and assertEquals test
        }
protected function setUp()
    {
         putenv('ENV=testing');
         require __DIR__ . '/../../src/bootstrap.php';
         $this->app = $app;
         $c = $app->getContainer();
         $c['settings']['displayErrorDetails'] = ('development' === (getenv('ENV') ?: 'development'));
         $c['errorHandler'] = function ($c) {
              return function ($request, $response, $exception) use ($c) {
                  return $c['response']->withStatus(500)
                                       ->withHeader('Content-Type', 'application/json')
                                       ->write(json_encode(['error'=>true, 'error_msg'=>$exception->getMessage()]));
              };
          };
         //$app->run();
    }

测试是检测模拟请求是否发送回正确的状态代码,但由于某种原因,它会抛出抛出异常而不是继续返回propoer状态代码

  

有1个错误:

     

1)UsersTest :: testGetUserFail异常:没有模型的查询结果   [应用\模型\用户]。

     

〜/应用程序/ SRC /控制器/ UsersController.php:32

     

FAILURES!测试:2,断言:1,错误:1。完成。

就像我说的,如果我在浏览器中运行代码,它按预期工作,但不能在phpunit测试中...

我的测试逻辑是错误的吗?我应该测试异常而不是预期的状态代码吗?

0 个答案:

没有答案