php - 在 lumen 5.5 中测试文件上传

标签 php unit-testing testing lumen

我使用的是 Lumen 5.5,我编写了简单的上传文件的应用程序。

我这样写测试(遵循 this 教程)

<?php

class UploadImageTest extends TestCase
{

    Use DatabaseMigrations;

    public function testUploadingImageSuccessfully()
    {
        $this->json('POST', '/images', [
            'image' => UploadedFile::fake()->image('image.jpg')
        ])->assertResponseOk()
    }

}

问题是在我的 Controller 中,$request->file('image') 返回 null。

<?php

use Illuminate\Http\Request;

class UploadController extends Controller
{

    public function upload(Request $request)
    {
        if ($request->file('image')) { // always return null
            return "File is uploaded!";
        }

        return "File is not uploaded!";
    }

}

我检查了其他问题(如 this one)并尝试了给定的解决方案,但没有成功!

最佳答案

我在搜索同一问题的答案时遇到了这个问题,但不确定它是否相关,所以我提出了一个与我的用例相关的问题。 (Here)

解决方案很简单:UploadedFile::fake() 不适用于 JSON,因为它使用 XmlHttpRequest 伪造文件上传(据我所知)。因此,您必须从此更改您的测试:

public function testUploadingImageSuccessfully()
{
    $this->json('POST', '/images', [
        'image' => UploadedFile::fake()->image('image.jpg')
    ])->assertResponseOk()
}

为此:

public function testUploadingImageSuccessfully()
{
    $this->call('POST', '/images', [
        'image' => UploadedFile::fake()->image('image.jpg')
    ])->assertResponseOk()
}

希望对您有所帮助!

关于php - 在 lumen 5.5 中测试文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46408641/

相关文章:

testing - 具有选定元素的 Selenium IDE

testing - 以编程方式在 apache spark 中创建 dstream

php - 禁用模块会提高 PHP 性能吗?

php - 正则表达式包含换行符

php - Doctrine 不会生成跨数据库外键

php - 扫描整个网站的页面以查找一段代码

java - 如何测试 .class 文件是否已创建?

testing - 为什么映射值即使不是指针也会改变 - Golang

java - 如何使用 jMockit 模拟标记为 Final 的类并具有私有(private)构造函数

python - 测试 Python 装饰器?