我正在使用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测试中...
我的测试逻辑是错误的吗?我应该测试异常而不是预期的状态代码吗?