UnauthorizedException 未被 Laravel 5 / Codeception 捕获
UnauthorizedException not caught with Laravel 5 / Codeception
我试图在我的功能测试中使用 Codeception 拦截 UnauthorizedException。好吧,实际上我的功能测试是由代码接收触发的 Laravel 测试。所以,我尝试了两种方法:
/** @test
*
* @expectedException UnauthorizedException
*/
public function test_exception()
{
$this->visit("/associations/1/edit")
}
或
/** @test
*
*/
public function test_exception()
{
\PHPUnit_Framework_TestCase::setExpectedException(UnauthorizedException::class);
$this->visit("/associations/1/edit")
}
在我的控制器中,我只是把它扔进去测试:
throw new UnauthorizedException();
在这两种情况下,它只是说:
Failed asserting that exception of type "UnauthorizedException" is thrown.
一切似乎都很好,但似乎不起作用...知道为什么吗???
编辑:我在控制器中的编辑方法
public function edit($id)
{
$association = Association::findOrFail($id);
$federation = $association->federation;
if (Auth::user()->cannot('edit', $association)) { // I have checked with dd() my test goes here.
throw new UnauthorizedException();
}
$users = User::all();
$federations = Federation::all();
return view('associations.form', compact('association', 'users', 'federations', 'federation'));
}
我终于从here得到了解决方案:
我猜,基本思路是捕获异常并将其发送到返回视图的处理程序。
因此,为了进行测试,您应该在 Handler.php 中包含以下条件:
public function render($request, Exception $e)
{
if (App::environment() == 'testing') {
throw $e;
}
// Your exception management...
现在抛出异常!
我试图在我的功能测试中使用 Codeception 拦截 UnauthorizedException。好吧,实际上我的功能测试是由代码接收触发的 Laravel 测试。所以,我尝试了两种方法:
/** @test
*
* @expectedException UnauthorizedException
*/
public function test_exception()
{
$this->visit("/associations/1/edit")
}
或
/** @test
*
*/
public function test_exception()
{
\PHPUnit_Framework_TestCase::setExpectedException(UnauthorizedException::class);
$this->visit("/associations/1/edit")
}
在我的控制器中,我只是把它扔进去测试:
throw new UnauthorizedException();
在这两种情况下,它只是说:
Failed asserting that exception of type "UnauthorizedException" is thrown.
一切似乎都很好,但似乎不起作用...知道为什么吗???
编辑:我在控制器中的编辑方法
public function edit($id)
{
$association = Association::findOrFail($id);
$federation = $association->federation;
if (Auth::user()->cannot('edit', $association)) { // I have checked with dd() my test goes here.
throw new UnauthorizedException();
}
$users = User::all();
$federations = Federation::all();
return view('associations.form', compact('association', 'users', 'federations', 'federation'));
}
我终于从here得到了解决方案:
我猜,基本思路是捕获异常并将其发送到返回视图的处理程序。
因此,为了进行测试,您应该在 Handler.php 中包含以下条件:
public function render($request, Exception $e)
{
if (App::environment() == 'testing') {
throw $e;
}
// Your exception management...
现在抛出异常!