更新見下文如何模擬laravel測試用例中的xmlHttpRequests?
我的控制器(使用Request::ajax()
作爲條件)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);
}
因爲真正Request
類,而不是使用Testcase
類,我不得不實例化時手動輸入指定的路線被稱爲該方法的call
方法時所使用的嘲笑替代品。但我認爲這樣可以,因爲我只是想控制Request::ajax()
條件中的表達式按照預期的方式工作。
好問題 - [代碼](https://github.com/symfony/symfony/blob/587f35513761547e43c4538e44df485f62fcd92e/src/Symfony/Component/HttpFoundation/Request.php#L1590)用於檢測是否它是一個AJAX請求確實只是檢查你正在設置的標題。 – fideloper