我有一个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);
}
}
答案 0 :(得分:0)
您不必模拟请求 - 只需验证它是否已发送。 Dispacth将在控制器操作时进行验证。当你打电话:
$this->call("POST","/path",$params);
您正在触发路径收集,该收集充当查找表。该集合存储所有预定义的路由。因此,您必须挂钩该集合,以验证您自己的调度。整个响应过程由 TTPKernelInterface 处理,并且像堆栈一样 - 返回对用户的响应。要进行测试,由于依赖性,您将不得不进行大量的模拟。您可以查看核心Laravel测试目录。在那里你可以找到Taylor Otwell如何在没有应用的情况下测试整个框架 - 通过模拟请求。我从那里学到了很多东西。