我有laravel 5.5 App。
我正在尝试测试使用laravel snappy下载PDF。
到目前为止,我的 CheckTest.php 中有一个功能:
public function testPrintCheck(){
$check = $this->createCheck();
$route ="/api/checks/print/$check->id";
$response = $this->get($route);
$this->assertEquals($response->headers->get('content-type') , 'application/pdf');
$response->assertStatus(200);
}
在我的控制器中,我有:
public function printCheck(Request $request, Check $check){
$pdf = \PDF::loadView("pdf.check");
$file= storage_path(). "/app/checks/$check->id.pdf";
$pdf->save($file);
$headers = array(
'Content-Type: application/pdf'
);
return response()->download($file, "check_n_$check->id.pdf", $headers)->deleteFileAfterSend(true)->setStatusCode(200);
}
当前测试有效,但是我希望删除下载后创建的文件(使用 deleteFileAfterSend(true)),但是不会删除该文件。
因此,如果我添加断言该文件不存在,它将失败。
答案 0 :(得分:0)
根据不久前在 github 上创建的问题,有一个可能的解决方案: https://github.com/laravel/framework/issues/36286
在 Laravel 8.24 上工作
基本上我们需要强制发送文件内容,然后触发文件删除
public function test(): void
{
$response = $this->get('url/to/download');
// Here the file is not deleted yet
$response->sendContent();
// Here the file is deleted
}