【发布时间】:2016-03-15 13:57:31
【问题描述】:
我正在使用 phpunit 4.8.23 和 laravel 5.2。
我的一个控制器正在抛出一个 HttpException,如下所示。
throw new HttpException(403, 'auth_failure');
在 Handler.php 中
if ($e instanceof HttpException){
return response()->json(array(...), $e->getStatusCode());
}
为了对此进行测试,我在测试文件中使用了以下代码。
1
/**
* @expectedException Symfony\Component\HttpKernel\Exception\HttpException
* @expectedExceptionMessage auth_failure
*/
public function testMethod(){....}
2
public function testMethod(){
$this->json(.....);
$this->setExpectedException('HttpException');
}
3 甚至尝试 catch
try {$this->json(....)}
catch(\Symfony\Component\HttpKernel\Exception\HttpException $e){..}
我也用\Exception 尝试了第三种情况。
在所有情况下,我都会得到输出
PHPUnit 4.8.23 by Sebastian Bergmann and contributors.
.Symfony\Component\HttpKernel\Exception\HttpException {#986
-statusCode: 403
-headers: []
#message: "auth_failure"
#code: 0
#file: "<path to file>"
#line: 103
-trace: {
57. App\Http\Controllers\DeviceController->register() ==> new Symfony\Component\HttpKernel\Exception\HttpException(): {.....
我已经解决了this、this 和this 的问题,但没有取得任何进展。
编辑 我希望我已经提供了所有相关信息。无论如何,这是完整的方法
/**
* @expectedException Symfony\Component\HttpKernel\Exception\HttpException
* @expectedExceptionMessage auth_failure
*/
public function testRegAuthFailure()
{
$this->json('POST',
'auth',
[
"lang" => "us_en",
"data" => [
"identity" => "00000004",
"password" => "wrong",
]
]
);
$this->setExpectedException('HttpException');
}
感谢任何帮助:)
【问题讨论】:
-
能否请您发布您尝试运行的实际代码(即您的测试的完整代码
testMethod)? -
这里是实际代码
-
你试过直接在“testRegAuthFailure”里面抛出异常吗?
-
那行得通,即
thow new HttpException(403, 'auth_failure');而不是json方法调用。
标签: php unit-testing phpunit laravel-5.2