【发布时间】:2013-12-04 07:48:03
【问题描述】:
更新见下文
我的控制器区分 ajax 和其他请求(使用 Request::ajax() 作为条件)。这工作得很好,但我想知道是否有一种方法可以对处理请求的控制器进行单元测试。测试应该是什么样子?
可能是这样的,但它不起作用......
<?php
class UsersControllerTest extends TestCase
{
public function testShowUser()
{
$userId = 1;
$response = $this->call('GET', '/users/2/routes', array(), array(), array(
'HTTP_CUSTOM' => array(
'X-Requested-With' => 'XMLHttpRequest'
)
));
}
}
更新
我找到了一个解决方案。可能是。由于我对测试 Request 类的正确功能不感兴趣(很可能 Laravel、Symfony 等提供的所有本机类都已经进行了足够的单元测试)最好的方法可能是模拟它的 ajax 方法。像这样:
public function testShowUser()
{
$mocked = Request::shouldReceive('ajax')
->once()
->andReturn(true);
$controller = new UsersCustomRoutesController;
$controller->show(2,2);
}
因为在使用Testcase 类的call 方法时使用的是真正的Request 类而不是它的模拟替代品,所以我必须实例化在手动输入指定路线时调用的方法。但我认为这没关系,因为我只想控制Request::ajax() 条件中的表达式在此测试中按预期工作。
【问题讨论】:
-
好问题 - the code 用于检测它是否是 AJAX 请求确实只是检查您正在设置的标头。