问题描述
我有可渲染的控制器,用于渲染一些pdf。在路由中,我只需要传递一些字符串作为参数,我的方法如下所示:
public function __invoke(
Request $request,IncidentPdfGenerationService $incidentPdfGenerationService,string $report
) {
$pdf = $incidentPdfGenerationService->getRawPdf($request,$report);
$name = $report . '.pdf';
return $pdf->stream($name);
}
这就是我所拥有的:
/** @test */
public function generate_incidents_pdf()
{
$this->user->syncRoles(['system admin','field manager','field officer','reports admin']);
$this->actingAs($this->user);
$this->mock(IncidentPdfGenerationService::class,function ($mock) {
$mock->shouldReceive('getRawPdf')->once();
$mock->getRawPdf(request(),'pdf-report');
$url = route('incidents.generate-pdf',['pdf-report']);
$response = Http::get($url);
$response->ok();
});
}
IncidentPdfGenerationService
是一个接口,我将其绑定到服务提供商中。如何编写仅使用assertStatus(200)来检查此路由的测试?
解决方法
在测试服务或类似服务时,您应该尝试不必创建任何依赖关系。我建议使用Mockery来完成此操作,因为您可以创建IncidentPdfGenerationService
依赖项的虚拟版本。