Ich möchte eine CSV-Datei über eine Laravel-API hochladen und dann den Upload mit PHPUnit testen.So testen Sie in PHPUnit; ein CSV File Upload mit einer in Laravel geschriebenen API?
Was würde meine store()
Funktion in der Controller und testCreate()
Funktion im Grunde aussehen.
Das ist, was ich bisher habe:
<?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();
}
}
und die Controller-Methode wie folgt aussieht:
<?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();
}
}
Jede Hilfe wird :)
von
innerhalb testCreate Funktion können Sie eine CSV-Datei als String simulieren können statt Upload selbst nicht? Ich hatte mit Xml-Dateien zu tun Ich habe es so auf meine Testfälle –
Ein Unit-Test von 'store()' sollte abdecken, wenn die Datei gespeichert ist. Ein besserer Test wäre 'assertStringEqualsFile()'. Das erste Argument sollte '$ importList-> importFile' und das zweite sollte' $ file' sein. Dieser Test würde mehr als einen Antwortstatus abdecken. – user1965074