如何在Laravel中测试base64图像上传

rn0zuynd  于 2023-03-24  发布在  其他
关注(0)|答案(1)|浏览(181)

我有一个API,接受64基本代码图像,它从其他服务接收图像
{“token_image”:“BASE64 IMAGEN”,}
在测试中,我是这样测试的:

$response = ....
....
$attributes = ["token_image"=>"/9j/2wCEAAEBAQEBAQEBAQEBAQEBAQEBBAAgICAgI................."];
    
    json("POST", "/route", 
        $attributes
    )->assertOk()
        ->assertJson($response);

在我的测试中,我使用了saloon库,它允许第一次模拟和保存响应,并且在子序列请求中它不会命中路由,它只是使用记录的响应,但问题是我不能像这样添加属性:
[“token_image”=〉"/9j/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAGICAgI ................."]
因为base64图片太大了,字符串太多了,我该怎么办?谢谢。

qco9c6ql

qco9c6ql1#

你需要的东西叫做“夹具”,基本上是:

  • tests文件夹中,创建一个名为fixtures的文件夹。
  • fixtures文件夹中创建my-base64-image.txt
  • 顾名思义,将base64-image-text移动到上一步创建的文件中。

最后,使用上述夹具而不是硬编码,如:

$attributes = [
    "token_image" => file_get_contents(__DIR__ . '/../fixtures/my-base64-image.txt'),
];

注意将“../”部分更改为正确的路径,因为上面是基于我自己的文件夹结构(因为我不知道你的)。

上面只是一个例子,我的意思是,在每个测试中重复fixtures文件夹的路径是我永远不会做的事情,相反,在所有其他测试类扩展的TestCase类中,或者在一些trait中,尝试类似这样的东西:

protected function loadFixture($name)
{
    return file_get_contents(__DIR__ . '/../fixtures/' . $name);
}

相关问题