gpt4 book ai didi

php - 在单元测试中处理 Laravel HttpException

转载 作者:可可西里 更新时间:2023-11-01 12:45:28 27 4
gpt4 key购买 nike

我在 Laravel 中进行单元测试的一个测试函数不断出错。我试图断言在不满足某些条件的情况下请求特定页面会触发 403 FORBIDDEN 错误。

我的测试用例函数是这样的:

public function testNoAjaxCall() {

$this->call('POST', 'xyz', array());

$this->assertResponseStatus(403);

}

在路由到的 Controller 操作中,我有这个:

if(!Input::has('ajax') || Input::get('ajax') != 1) {

// Drop all 'non-ajax' requests.
App::abort(403, 'Normal POST requests to this page are forbidden. Please explicitly tell me you\'re using AJAX by passing ajax = 1.');

}

运行 phpunit 返回以下内容:

1) RaceTest::testNoAjaxCall

Symfony\Component\HttpKernel\Exception\HttpException: Normal POST requests to this page are forbidden. Please explicitly tell me you're using AJAX by passing ajax = 1.

[path\to\laravel]\vendor\laravel\framework\src\Illuminate\Foundation\Application.php:875

[redacted stack trace]

[path\to\laravel]\vendor\symfony\http-kernel\Symfony\Component\HttpKernel\Client.php:81

[path\to\laravel]\vendor\symfony\browser-kit\Symfony\Component\BrowserKit\Client.php:325

[path\to\laravel]\vendor\laravel\framework\src\Illuminate\Foundation\Testing\TestCase.php:74

[path\to\laravel]\app\tests[testFileName].php:176

FAILURES!

Tests: 6, Assertions: 17, Errors: 1.

当然,堆栈跟踪指向 $this->call(..);App::abort(..)

我的 app/start/global.php 文件中有一个 HttpException 错误处理程序,它在单元测试之外触发它时起作用(例如,直接发出 POST 请求到测试的 URL),但单元测试似乎没有正确捕获异常甚至到达断言调用。

我错过了什么?

最佳答案

http://phpunit.de/manual/3.7/en/appendixes.annotations.html#appendixes.annotations.expectedException应该已经解释过了。

/**
* @expectedException \Symfony\Component\HttpKernel\Exception\HttpException
* @expectedExceptionMessage Normal POST requests to this page are forbidden. Please explicitly tell me you\'re using AJAX by passing ajax = 1.
*/
public function testNoAjaxCall() {

$this->call('POST', 'xyz', array());

}

关于php - 在单元测试中处理 Laravel HttpException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21555299/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com