Mit Test::Mojo hochgeladene Datei ist leer

Carsten

Als Modul habe ich einen Mojolicious Web Service implementiert , der Datei-Uploads per POST akzeptiert. Ein Beispiel für einen cURL-Befehl:

curl -X POST http://localhost:3000/process -F [email protected]

Dies funktioniert wie erwartet, die Datei wird verarbeitet und das Ergebnis wird zurückgegeben.

Ich versuche es jetzt mit Test::Mojo wie folgt zu testen :

my $t = Test::Mojo->new( 'TK::Proxy' );

my $data = {
    inputFile => { filename => 't/file.txt' },
};

$t->post_ok('/process' => form => $data)
    ->status_is(200)

Der Test schlägt fehl:

$ ./Build test
[...]
#   Failed test '200 OK'
#   at t/20_app.t line 44.
#          got: '400'
#     expected: '200'

Das Debuggen des Codes zeigt, dass der hochgeladene Inhalt leer ist.

Ich habe überprüft, ob die Datei gefunden wird, indem ich vor dem Test einen einfachen Druck hinzugefügt habe:

open FILE,'<', 't/file.pdf' or die("Could not read file");

while (my $line = <FILE>) {
    print STDERR ($line . "\n");
}

Dies gibt die Datei wie erwartet aus.

Meine Schlussfolgerung ist daher, dass der Fehler im post_okAufruf und/oder in der Struktur von liegt $data, aber ich konnte nicht herausfinden, wo. Soweit ich das beurteilen kann, sieht der Aufruf genauso aus wie im Beispiel in der Dokumentation .

So wird der Dateiinhalt serverseitig verarbeitet:

my $self = shift()->openapi()->valid_input() or return;

my $input  = $self->validation()->output();

my $content;
eval {
    my $document = $input->{inputFile}->slurp;

    $content = $self->textractor()
        ->process(
            $input->{source},
            $input->{target},
            $document,
            _parse_runtime_params($input->{runtimeParams}),
        );
};

Es stellt sich heraus, dass das Ergebnis von $input->{inputFile}->slurp;ein leerer String für den Test ist. Im cURL-Aufruf enthält es jedoch den Dateiinhalt korrekt.

Carsten

Die Lösung, wie von @Boroding angegeben, bestand in der Tat darin, zu ersetzen fileNamedurch file:

my $data = {
  inputFile => { file => 't/file.txt' },
};
$t->post_ok('/process' => form => $data)->status_is(200);

Dies fehlt vermutlich im Dokumentationsbeispiel, weil der Test nicht von externen Dateien abhängen soll. Der sauberere Weg, dies zu tun, ist also:

my $data = {
  inputFile => { content => "File content", fileName => 'file.txt' },
};
$t->post_ok('/process' => form => $data)->status_is(200);

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

AWS Lambda und S3 - Die hochgeladene PDF-Datei ist leer

Die hochgeladene Datei von ASP.NET in Azure-Blob ist leer

Die in Python ftplib erstellte und auf FTP hochgeladene Datei ist leer

hochgeladene Datei ist zu groß php

Eine hochgeladene Datei mit Inhalt verspotten

Datei mit AJAX & PHP hochladen - $ _FILES Array ist leer

Testen Sie mit FileReader, ob die Datei leer ist

Die hochgeladene VirusTotal-Datei ist Null Byte

Die hochgeladene Datei bei Azure ist 0 Bites

Wie speichere ich eine hochgeladene Datei mit primeng fileupload?

So aktualisieren Sie eine hochgeladene Datei mit yii2

So speichern Sie hochgeladene Bilder mit PHP in einer Datei

Wie verbinde ich die hochgeladene Excel-Datei mit OLEDB?

Verbinde die hochgeladene Datei mit einem Beitrag in Django

Wie speichere ich eine mit vichUploaderBundle hochgeladene Datei?

Laravel Zugriff hochgeladene Datei

Angular - POST hochgeladene Datei

Laravel Move hochgeladene Datei

WordPress hochgeladene Datei entfernen

Warum ist meine XML-Datei nach dem Generieren mit XML :: LibXML leer?

Logstash-Start mit Fehler: Pipelines YAML-Datei ist leer

Wie überprüfe ich eine Datei, wenn sie leer ist, ohne sie mit open zu verwenden?

Was passiert mit scanf, wenn der eingegebene Wert aus einer Datei leer ist?

Überprüfen, ob die CSV-Datei auch mit einem Header leer ist

Die Datei ist leer, nachdem sie mit Uri - Retrofit erstellt wurde

Django uWSGI erstellt eine Protokolldatei, die Datei ist jedoch leer (funktioniert mit dem Entwicklungsserver).

Index ist in einer chm-Datei leer, die mit Microsoft HTML Help Workshop kompiliert wurde

Überprüfen, ob eine hochgeladene Datei eine gültige PEM-Datei ist

Wie schreibe ich mit OpenCSV eine Spalte in dieselbe CSV-Datei, auch wenn die Datei leer ist?

TOP Liste

heißlabel

Archiv