首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试假文件上传到在Laravel中验证文件的路径?

如何测试假文件上传到在Laravel中验证文件的路径?
EN

Stack Overflow用户
提问于 2019-04-01 13:13:08
回答 3查看 4K关注 0票数 1

我试图在我的控制器中为路由“存储”编写一个测试单元,通过我的方法的验证器传递一个要测试的假文件,但我得到的只是数据不是一个文件:

代码语言:javascript
复制
Illuminate\Foundation\Testing\TestResponse {
  +baseResponse: Illuminate\Http\JsonResponse {
    #data: "{
              "message":"The given data was invalid.",
              "errors":{"invoice":["The invoice must be a file."]}
           }"

代码:

  • 测试:
代码语言:javascript
复制
        $data = factory('App\Domain\X\X')->raw(['creator_id' => $user->id]);
        $data['invoice'] = UploadedFile::fake()->create('invoice.xlsx');
        $response = $this->json('POST', route('x.store', $data));
  • 主计长:
代码语言:javascript
复制
 public function store(XXXRequest $request)
    {
        ...
  • 请求:
代码语言:javascript
复制
class XXXRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => 'required',
            'invoice' => 'nullable|file',
        ];
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-01 13:29:53

试试这个:

测试:

代码语言:javascript
复制
    $data = factory('App\Domain\X\X')->raw(['creator_id' => $user->id]);
    $data['invoice'] = UploadedFile::fake()->create('invoice.xlsx');
    $response = $this->json('POST', route('x.store', $data), [
       'name' => 'abc',
       'invoice' => $data['invoice']
    ]);
票数 2
EN

Stack Overflow用户

发布于 2019-04-01 13:30:19

只需从本地文件创建一个UploadedFile并将其添加到请求中:

代码语言:javascript
复制
    use Illuminate\Http\UploadedFile;

    $filename = public_path('tests/invoice.pdf');
    $file = new UploadedFile($filename, 'invoice.pdf', 'application/pdf', filesize($filename), null, true);

    $this->post('/', [
        'invoice' => $file,
    ]);
票数 2
EN

Stack Overflow用户

发布于 2021-10-08 08:06:57

您可以阅读有关测试文件上载这里或访问正式文件的信息。

代码语言:javascript
复制
/**
 * Example 
 *
 * @test 
 */
public function test_correct_file_uploading(): void
{   
    // Set fake storage ('local', 's3', etc)
    Storage::fake('local');
    
    $response = $this->json('POST', '/path_to_your/controller/method', [
        'file' => UploadedFile::fake()->create('invoice.xlsx', 1024)
    ]);

    // Assert response successful
    $response->assertSuccessful();
    
    // Assert the file was stored
    Storage::disk('local')->assertExists('invoice.xlsx');
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55456022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档