测试路线调度

时间:2014-02-25 19:08:18

标签: laravel laravel-4 phpunit mockery

我有一个API,其中包含将请求转发到另一个控制器的方案。

即:

$request = Request::create'/new/resource', 'POST');
Route::dispatch($request);

如何编写测试来验证此调度是否符合我的预期? (我知道我不应该嘲笑'请求'门面)

即:

class MyTest extends TestCase {
    public function myTestShouldForwardRequestCorrectly()
    {
        // Once for initial request, and once for fwd request?
        // Maybe also test w/ mockery spy which resource the Request is going to?
        $m = Route::shouldReceive('dispatch')->times(2);

        .... setup test ...

        $this->call('POST', '/initial/resource', $parameters);
    }
}

1 个答案:

答案 0 :(得分:0)

您不必模拟请求 - 只需验证它是否已发送。 Dispacth将在控制器操作时进行验证。当你打电话:

$this->call("POST","/path",$params); 

您正在触发路径收集,该收集充当查找表。该集合存储所有预定义的路由。因此,您必须挂钩该集合,以验证您自己的调度。整个响应过程由 TTPKernelInterface 处理,并且像堆栈一样 - 返回对用户的响应。要进行测试,由于依赖性,您将不得不进行大量的模拟。您可以查看核心Laravel测试目录。在那里你可以找到Taylor Otwell如何在没有应用的情况下测试整个框架 - 通过模拟请求。我从那里学到了很多东西。