【发布时间】:2014-02-28 14:07:13
【问题描述】:
我在 Laravel 中进行单元测试的一个测试函数不断出错。我试图断言在不满足某些条件的情况下请求特定页面会触发 403 FORBIDDEN 错误。
我的测试用例函数是这样的:
public function testNoAjaxCall() {
$this->call('POST', 'xyz', array());
$this->assertResponseStatus(403);
}
在路由到的控制器动作中,我有这个:
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:禁止对该页面的正常 POST 请求。请通过传递 ajax = 1 明确告诉我您正在使用 AJAX。
[路径\to\laravel]\vendor\laravel\framework\src\Illuminate\Foundation\Application.php:875
[编辑的堆栈跟踪]
[路径\to\laravel]\vendor\symfony\http-kernel\Symfony\Component\HttpKernel\Client.php:81
[路径\to\laravel]\vendor\symfony\browser-kit\Symfony\Component\BrowserKit\Client.php:325
[路径\to\laravel]\vendor\laravel\framework\src\Illuminate\Foundation\Testing\TestCase.php:74
[路径\to\laravel]\app\tests[testFileName].php:176
失败!
测试:6,断言:17,错误:1。
当然堆栈跟踪指向$this->call(..); 和App::abort(..)
我的 app/start/global.php 文件中有一个 HttpException 错误处理程序,它在单元测试之外触发它时有效(例如,直接向测试的 URL 发出 POST 请求),但单元测试似乎没有正确捕获异常甚至到达断言调用。
我错过了什么?
【问题讨论】:
标签: php unit-testing symfony laravel laravel-4