Vorrei caricare un file CSV tramite un'API Laravel quindi testare il caricamento con PHPUnit.Come eseguire il test in PHPUnit; un caricamento di file CSV utilizzando un'API scritta in Laravel?
Che aspetto avrebbe la mia funzione store()
nel controller e nella funzione testCreate()
.
Questo è quello che ho ottenuto finora:
<?php
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Foundation\Testing\WithoutMiddleware;
class ProspectListControllerTest extends TestCase
{
use WithoutMiddleware, DatabaseTransactions;
public function testCreate()
{
$file = new Symfony\Component\HttpFoundation\File\UploadedFile(storage_path('/crm/data/test-file.csv'), 'test-file.csv', 'text/plain', 446, null, true);
$this->call('POST', '/api/lists-imports/', [], [], ['csv_file' => $file]);
$this->dump()->assertResponseOk();
}
}
e il metodo di controllo si presenta come:
<?php
namespace App\Http\Controllers;
use App\ListImport;
use Illuminate\Http\Request;
class ListImportController extends Controller
{
public $model = ListImport::class;
public function store(Request $request, ListImport $importList)
{
$request->file('importFile')->move(public_path('storage.crm.data'), $request->file('importFile')->getClientOriginalName());
$importList->importFile = public_path('storage.crm.data') . '/' . $request->file('importFile')->getClientOriginalName();
$importList->save();
}
}
Qualsiasi aiuto sarà apprezzato :)
all'interno funzione testCreate è possibile simulare un file CSV come una stringa invece di caricare se stesso no? Avevo a che fare con file xml Ho fatto così sui miei testicoli –
Un test di unità di 'store()' dovrebbe coprire se il file è stato memorizzato. Un test migliore sarebbe quello di "assertStringEqualsFile()'. Il primo argomento dovrebbe '$ importList-> importFile' e il secondo dovrebbe essere' $ file'. Questo test coprirebbe più di uno stato di risposta. – user1965074