Laravel CSV 다운로드 테스트 방법
public function export()
{
$actions = $this->getData()->get();
$columns = [
'User',
'Start Date',
'End Date',
];
$data = [];
foreach ($actions as $action) {
$data[] = [
$action->user->name ?? '',
$action->due_at,
$action->completed_at,
];
}
$now = Carbon::now()->format('d-m-Y');
$filename = "actions-{$now}";
return csv_file($columns, $data, $filename);
}
위는 데이터를 수집하여 csv_file이라는 헬퍼 함수로 전송하여 CSV 파일로 내보냅니다.
완전성을 위해 다음을 포함합니다.
if (! function_exists('csv_file')) {
function csv_file($columns, $data, string $filename = 'export'): BinaryFileResponse
{
$file = fopen('php://memory', 'wb');
$csvHeader = [...$columns];
fputcsv($file, $csvHeader);
foreach ($data as $line) {
fputcsv($file, $line);
}
fseek($file, 0);
$uid = unique_id();
Storage::disk('local')->put("public/$uid", $file);
return response()->download(public_path("storage/$uid"), "$filename.csv")->deleteFileAfterSend(true);
}
}
이제 먼저 확인하고 싶은 테스트가 2개 있습니다. 엔드포인트에서 오류가 발생하지 않도록 200개의 상태 응답을 받고 두 번째로 응답에 CSV용으로 생성된 파일 이름이 포함됩니다.
200 상태 코드를 처리하려면 엔드포인트를 실행하고 assertStatus(200) 대신 200에 대한 바로 가기인 assertOk()를 실행합니다.
다음으로 응답의 헤더를 확인하고 내용 처리 헤더를 읽으십시오. 여기에는 첨부 파일과 파일 이름이 포함됩니다. ** ** assert true를 수행하고 헤더를 예상 응답과 비교합니다.
test('can export actions', function () {
$this->authenticate();
$response = $this
->get('admin/reports/actions/csv')
->assertOk();
$this->assertTrue($response->headers->get('content-disposition') == 'attachment; filename=actions-'.date('d-m-Y').'.csv');
});
또 다른 방법은 Pest의 expect API를 사용하는 것입니다.
$header = $response->headers->get('content-disposition');
$match = 'attachment; filename=actions-'.date('d-m-Y').'.csv';
expect($header)->toBe($match);
Reference
이 문제에 관하여(Laravel CSV 다운로드 테스트 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dcblog/laravel-how-to-test-csv-download-3l4j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)