在lumen 5.5中测试文件上传

Beh*_*dsh 3 php testing unit-testing lumen

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

我写了这样的测试(按照教程)

<?php

class UploadImageTest extends TestCase
{

    Use DatabaseMigrations;

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

}
Run Code Online (Sandbox Code Playgroud)

问题是在我的控制器中,$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!";
    }

}
Run Code Online (Sandbox Code Playgroud)

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

bnu*_*mak 5

我在寻找同一问题的答案时遇到了这个问题,并且不确定它是否相关,因此我提出了一个与我的用例相关的问题。(这里)

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

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

对此:

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

希望能帮助到你!