用内容模拟上传的文件
Mocking an uploaded file with content
我正在开发一个 Laravel 项目,该项目使用 GraphQL 和 Lighthouse 作为后端 API。
对于某些端点,我们支持文件上传。我们已经成功测试了。
我们现在正在创建的新端点也将支持文件上传。但是,我们不仅要将文件存储在服务器上的某个位置,还必须读取该文件的内容并根据该内容执行某些操作。
我们当然想测试这个新功能。但是要那样做。我们必须模拟一个具有特定内容的上传文件来测试它。我所能找到的只是一个伪造的 UploadedFile::fake()
方法,它为您创建了一个 random/empty 文件。
我知道我可以为此创建单元测试。但是我真的很想添加一个端到端的测试。
official lighthouse docs有如下代码示例:
<?php
$this->multipartGraphQL(
[
'operations' => /* @lang JSON */
'
{
"query": "mutation Upload($file: Upload!) { upload(file: $file) }",
"variables": {
"file": null
}
}
',
'map' => /* @lang JSON */
'
{
"0": ["variables.file"]
}
',
],
[
'0' => UploadedFile::fake()->create('image.jpg', 500),
]
)
我需要用我自己创建的模拟文件替换上传的文件。可能是这样的:
<?php
UploadedFile::fake()
->fromPath('example/file/in/my/testsuite.obj')
->create()
有什么内置方法可以设置假上传文件的内容吗?或者有什么方法可以用我自己的工厂逻辑扩展 class 吗?
要根据测试文件伪造 Laravel 中的文件,您可以使用 new File
。
class 是 Illuminate\Http\File
.
构造函数获取一个路径并从该文件路径为您提供一个文件。因此,要使用您的示例,将按以下方式创建假文件
new File('example/file/in/my/testsuite.obj')
然后您只需将发送到 Lighthouse 的文件设置为该文件即可。
我正在开发一个 Laravel 项目,该项目使用 GraphQL 和 Lighthouse 作为后端 API。 对于某些端点,我们支持文件上传。我们已经成功测试了。
我们现在正在创建的新端点也将支持文件上传。但是,我们不仅要将文件存储在服务器上的某个位置,还必须读取该文件的内容并根据该内容执行某些操作。
我们当然想测试这个新功能。但是要那样做。我们必须模拟一个具有特定内容的上传文件来测试它。我所能找到的只是一个伪造的 UploadedFile::fake()
方法,它为您创建了一个 random/empty 文件。
我知道我可以为此创建单元测试。但是我真的很想添加一个端到端的测试。
official lighthouse docs有如下代码示例:
<?php
$this->multipartGraphQL(
[
'operations' => /* @lang JSON */
'
{
"query": "mutation Upload($file: Upload!) { upload(file: $file) }",
"variables": {
"file": null
}
}
',
'map' => /* @lang JSON */
'
{
"0": ["variables.file"]
}
',
],
[
'0' => UploadedFile::fake()->create('image.jpg', 500),
]
)
我需要用我自己创建的模拟文件替换上传的文件。可能是这样的:
<?php
UploadedFile::fake()
->fromPath('example/file/in/my/testsuite.obj')
->create()
有什么内置方法可以设置假上传文件的内容吗?或者有什么方法可以用我自己的工厂逻辑扩展 class 吗?
要根据测试文件伪造 Laravel 中的文件,您可以使用 new File
。
class 是 Illuminate\Http\File
.
构造函数获取一个路径并从该文件路径为您提供一个文件。因此,要使用您的示例,将按以下方式创建假文件
new File('example/file/in/my/testsuite.obj')
然后您只需将发送到 Lighthouse 的文件设置为该文件即可。