我已经实现了一个mojoliousweb服务
module
它接受通过post上传的文件。curl命令示例:
curl -X POST http://localhost:3000/process -F inputFile=@file.txt
这按预期工作,处理文件并返回结果。
我现在试着用
Test::Mojo
这样地:
my $t = Test::Mojo->new( 'TK::Proxy' );
my $data = {
inputFile => { filename => 't/file.txt' },
};
$t->post_ok('/process' => form => $data)
->status_is(200)
测试失败:
$ ./Build test
[...]
调试代码会发现上载的内容为空。
我已经通过在测试之前添加一个简单的打印来验证它是否找到了该文件:
open FILE,'<', 't/file.pdf' or die("Could not read file");
while (my $line = <FILE>) {
print STDERR ($line . "\n");
}
这将按预期输出文件。
因此我的结论是错误在于
post_ok
调用和/或结构
$data
,但我不知道在哪里。据我所知,这个调用与
documentation
.
这是在服务器端处理文件内容的方式:
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}),
);
};
结果是
$input->{inputFile}->slurp;
是测试的空字符串。但是,在curl调用中,它正确地包含了文件内容。