我正在尝试编写一些单元测试,以确保不会意外重写我的路线。我已经找到答案,可以检查是否为特定的路由here分配了正确的控制器。

但是,我还要检查是否将正确的中间件分配给了路由。我尝试了类似的方法

$tmp = new CorsService;
$corsMiddleware = Mockery::mock('Barryvdh\Cors\HandleCors[handle]', array($tmp))
    ->shouldReceive('handle')->once()
    ->andReturnUsing(function($request, Closure $next) {
        return $next($request);
    });

\App::instance('Barryvdh\Cors\HandleCors', $corsMiddleware);


由于某种原因,测试没有解决这个问题。我假设这是因为中间件实例未使用App::instance存储。

我究竟做错了什么?

最佳答案

所以我发现上面的代码有2个问题


您不能直接使用返回值->shouldReceive链接Mockery::mock
闭包中缺少\


工作示例:

$tmp = new CorsService;
$corsMiddleware = Mockery::mock('Barryvdh\Cors\HandleCors[handle]', array($tmp));
$corsMiddleware->shouldReceive('handle')->once()
    ->andReturnUsing(function($request, \Closure $next) {
        return $next($request);
    });

\App::instance('Barryvdh\Cors\HandleCors', $corsMiddleware);

10-06 03:49