亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用表單驗證測試 Laravel 媒體上傳

如何使用表單驗證測試 Laravel 媒體上傳

PHP
一只甜甜圈 2023-05-12 16:04:14
前段時間我在我的 laravel 項目中為我的媒體上傳寫了一個測試。測試只是將帶有圖像的 post 請求發送到路由,并檢查服務器是否發送 200 狀態代碼。use Illuminate\Http\UploadedFile;/** @test */public function it_can_upload_image(){    $response = $this->post('/media', [        'media' => new UploadedFile(__DIR__ . "/test_png.png", 'test_png.png'),    ]);    $response->assertStatus(200);}當我為 post 參數添加驗證規則時,media服務器返回 302 狀態代碼并且測試失敗。但是,當我在瀏覽器中手動測試媒體上傳時,一切正常。public function uplaodMedia($request) {    $request->validate([        'media' => 'required'    ]);    // ...}測試中請求的行為似乎與實際的瀏覽器請求不同。但是,直到現在我還沒有設法解決這個問題。有沒有人遇到過類似的事情?
查看完整描述

1 回答

?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

在為測試創建新的時,您需要傳遞true參數:$testUploadedFile

new?UploadedFile(__DIR__?.?"/test_png.png",?'test_png.png',?null,?null,?true)

在這里您可以找到構造函數定義:

/**

?* @param bool? ? ? ? $test? ? ? ? ?Whether the test mode is active

?*? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Local files are used in test mode hence the code should not enforce HTTP uploads

?*/

public function __construct(string $path, string $originalName, string $mimeType = null, int $error = null, bool $test = false)

雖然我不明白為什么要使用真實圖像進行此測試,但 Laravel 提供了一種內置方式來輕松測試文件上傳。


從文檔:


Storage facade 的 fake 方法允許您輕松生成一個假磁盤,結合 UploadedFile 類的文件生成實用程序,大大簡化了文件上傳的測試。


因此,您的測試可以簡化為以下內容:


use Illuminate\Http\UploadedFile;

use Illuminate\Support\Facades\Storage;


/** @test */

public function it_can_upload_image()

{? ? ? ??

? ? Storage::fake();


? ? $this->post('/media', ['media' => UploadedFile::fake()->image('test_png.png')])

? ? ? ? ->assertStatus(200);

}


查看完整回答
反對 回復 2023-05-12
  • 1 回答
  • 0 關注
  • 136 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號