使用Laravel进行测试,从PHP中的模板创建文件

问题描述

我要存档的内容

我想在Laravel中使用PHPunit编写功能测试。

我要测试的控制器做什么:

它接受测试记录的上载以将其存储到数据库中。每个记录由两个具有相同文件名的文件(xml,yml)组成。这两个文件都必须读取并存储在数据库中。上传文件永远不会存储在服务器上,它们是直接的进程。

我要测试的内容

我当前的问题是什么?

我想为xml和yml文件使用模板,并使用Faker为本测试生成假数据。原因:为什么不呢?我对测试的理解是,您应该测试尽可能多的案例,并且如果静态数据足够,为什么我们要在数据库的单元测试中使用FakerFactory等等?

当我查看Laravel: Testing File Uploads时,他们会在其中生成UploadedFile::fake()的测试文件。我对这些文件的理解是,它们是空的,您不能使用模板或类似的东西来填充有用的数据。我发现大多数解决方案只是将真实文件保留在他们的项目中。 Like this.

我可以使用blade,如图here所示,但是我不确定是否应该像这样滥用 blade

我可以使用YamlXMLReader / XMLWriter来完全生成xml和yml文件,但是这些文件中有很多静态文本,我只需要将数据填充到一些具体点。

问题:

  • 那么创建这种假文件的最佳方法是什么?我应该使用blade还是twig还是其他模板引擎?一个小的解决方案将不胜感激。
  • 还是我应该自己生成完整文件,为什么这样更好?
  • 或者生成假数据没有意义,我应该改用静态数据吗?

这是我当前的测试功能

public function testFullRecordUpload() {
    // Generate record files to upload
    // Todo Use template files with faker,or something like that
    $xml_file = UploadedFile::fake()->create('test_file.xml',$sizeInKilobytes = 566);
    $yml_file = UploadedFile::fake()->create('test_file.yml',$sizeInKilobytes = 20);

    // Send Files
    $response = $this->json('POST','/upload',[
        'xml' => $xml_file,'yml' => $yml_file
    ]);

    // Check response
    $response->assertOk();

    // Check if the uploaded data is available over API
    // Todo
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)