PHPUnit测试Laravel资源控制器的异常

时间:2014-04-21 23:35:13

标签: unit-testing exception exception-handling laravel phpunit

是否可以使用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');

2 个答案:

答案 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继承的所有东西的通用异常捕获器捕获。