Laravel 5.2:测试上载的文件是有效的:非对象上的isValid()

时间:2016-01-18 09:31:35

标签: php laravel tdd mockery

我正在尝试测试上传的文件功能。我在嘲笑UploadedFile,但是我从控制器那里得到了这个错误:

  

[Symfony的\元器件\调试\异常\ FatalErrorException]
    在非对象上调用成员函数isValid()

我的控制器将收到上传的文件(模拟的UploadedFile),但我无法调用UploadedFile的任何方法。

我的控制器:

class FileController extends Controller
{
    public function upload(Request $request)
    {
        return $request->file('file')->isValid();
    }
}

我的测试如下:

class FileTest extends TestCase
{
    private $fileMock;

    public function setUp()
    {
        parent::setUp();

        $this->fileMock = Mockery::mock(Symfony\Component\HttpFoundation\File\UploadedFile::class,
        [
            'getClientOriginalName'      => public_path() . '/images/foo.jpg',
            'getClientOriginalExtension' => 'jpg',
            'image/jpeg',
            null,
            null,
            true
        ]);
    }

    /** @test */
    public function it_gets_an_uploaded_file()
    {
        $this->fileMock
        ->shouldReceive('isValid')
        ->once()
        ->andReturn(true);

        $this->call('POST', 'file/upload', [], [], ['file' => [$this->fileMock]]);
        $this->assertResponseOk();

    }

    public function tearDown()
    {
        Mockery::close();
    }
}

1 个答案:

答案 0 :(得分:2)

问题是$request->file('file')是一个数组。因此,您需要更改:

public function upload(Request $request)
{
    return $request->file('file')->isValid();
}

到此:

public function upload(Request $request)
{
    return $request->file('file')[0]->isValid(); 
}
在你的FileController中