是否可以使用Laravel资源控制器测试Exceptions?每次我尝试执行以下操作时:
/**
* @expectedException Exception
* @expectedExceptionMessage Just testing this out
*/
public function testMyPost() {
$response = $this->call('POST', '/api/myapi/', array('testing' => 1));
}
我明白了:
Failed asserting that exception of type "Exception" is thrown.
我用 \ Exception 和例外尝试了这个。
在我的资源控制器中,我有:
public function store() {
throw new \Exception('Just for testing!');
}
有没有人知道我可以测试例外?我也尝试过使用:
$this->setExpectedException('InvalidArgumentException');
答案 0 :(得分:8)
问题在于hannesvdvreken状态;抓住了这个例外。一个简单的解决方法是告诉Laravels错误/异常处理程序,当我们进行测试时,我们只想抛出异常。
看起来像这样:
// If we are testing, just throw the exception.
if (App::environment() == 'testing') {
throw $e;
}
对于Laravel 5,这应该放在app / Exceptions / Handler.php中的render方法中
对于Laravel 4,这应该放在app / start / global.php中:
App::error(function(Exception $exception, $code)...
答案 1 :(得分:1)
不要专注于@expectedException
的符号。问题是异常被抓到了某个地方。也许使用App::error(function(Exception) {...
文件中的默认app/start/global.php
。
或者也许你试过赶上某个地方。尝试制作一个自定义异常,它不会被捕获从Exception继承的所有东西的通用异常捕获器捕获。