前提・実現したいこと
画像アップロード(基本)
こちらを参考に、名前を入力して画像を選択→確認→アップロード完了 という流れで画像をアップロードして一覧表示させるプログラムを作成しました。
実行するとダミーの画像をアップロードできるようなテストを作りたいのですが、イマイチどうすれば良いのかわかりません。
発生している問題・エラーメッセージ
UploadedFileを用いてダミー画像の作成はできたのですが、その後それをどうアップロードさせれば良いのかがわからず詰まっています。
該当のソースコード
FeatureTest
1<?php 2 3namespace Tests\Feature\Test; 4 5use Tests\TestCase; 6use Illuminate\Support\Facades\Validator; 7use App\Http\Requests\ImageUploadRequest; 8use Illuminate\Http\Request; 9use Illuminate\Http\UploadedFile; 10use Illuminate\Support\Facades\Storage; 11use Illuminate\Foundation\Testing\RefreshDatabase; 12use Illuminate\Foundation\Testing\WithoutMiddleware; 13 14class FeatureTest extends TestCase 15{ 16 17 /** 18 * アクセス表示確認 19 * @return void 20 */ 21 public function testCanView() 22 { 23 //フェイクデータ作成 24 $upload = factory("App\Http\Model\ImageUploadDAO")->create(); 25 26 //indexにアクセスすると 27 $response = $this->get("/upload"); 28 29 //アップロードした画像の一覧とタイトルが見える 30 $response->assertSee($upload->tbody) 31 ->assertSee($upload->title); 32 33 //確認画面 34 $response = $this->get("/upload/config"); 35 $response->assertSee($upload->body) 36 ->assertSee($upload->title); 37 38 //完了画面 39 $response = $this->get("/upload/finish"); 40 $response->assertSee($upload->body) 41 ->assertSee($upload->title); 42 } 43 44 public function testUpload() 45 { 46 47 $request =new \App\Http\Requests\ImageUploadRequest; 48 //フェイクディスクの作成 49 //strage/framework/testing/disks/image に保存 50 Storage::fake('design'); 51 52 //UploaderFile 53 $file = UploadedFile::fake()->image("thum.jpg","150","150"); 54 55 //とりあえず直接DBにユーザーネーム追加 56 $uploader = new \App\Http\Model\ImageUploadDAO; 57 $uploader->user_name = "hoge"; 58 $uploader->save(); 59 // レコードを挿入したときのIDを取得 60 $lastInsertedId = $uploader->id; 61 62 $confirm = new \App\Http\Controllers\ImageUploadController; 63 $confirm->confirm($request); 64 65 //画像を移動 66 $file->move(public_path() . "/img/upload/".$lastInsertedId,"thum.jpg"); 67 68 69 $response = $this->json( 70 "POST", 71 "/upload/confirm", 72 [ 73 "thumbnail" => $file, 74 ]); 75 } 76}
ImageUploadLogic
1<?php 2 3namespace App\Http\Logic; 4 5use Illuminate\Http\Request; 6 7class ImageUploadLogic extends \App\Http\Logic\BaseLogic{ 8 9 //出力(index) 10 public function getIndex() 11 { 12 $uploader =\App\Http\Model\ImageUploadDAO::orderBy("created_at", "desc")->paginate(5); 13 $imageArray = array( 14 "uploaders" => $uploader, 15 ); 16 return $imageArray; 17 } 18 19 //確認(confirm) 20 public function tmpUpload(\App\Http\Requests\ImageUploadRequest $request) 21 { 22 $userName = $request->userName; 23 $thumbnailName = uniqid("THUMBNAIL_") . "." . $request->file("thumbnail")->guessExtension(); // TMPファイル名 24 $request->file("thumbnail")->move(public_path() . \Config::get("fpath.tmp"), $thumbnailName); 25 $thumbnail = \Config::get("fpath.tmp").$thumbnailName; 26 27 $thumbnailAndUserNameArray = array( 28 "thumbnail" => $thumbnail,"userName" => $userName, 29 ); 30 31 return $thumbnailAndUserNameArray; 32 } 33 34 //完了(upload) 35 public function upload(Request $request) 36 { 37 $uploader = new \App\Http\Model\ImageUploadDAO; 38 $uploader->user_name = $request->userName; 39 $uploader->save(); 40 41 // レコードを挿入したときのIDを取得 42 $lastInsertedId = $uploader->id; 43 44 // ディレクトリを作成 45 if (!file_exists(public_path() .\Config::get("fpath.thum") . $lastInsertedId)) 46 mkdir(public_path() . \Config::get("fpath.thum") . $lastInsertedId, 0777); 47 48 // 一時保存から本番の格納場所へ移動 49 rename(public_path() . $request->thumbnail, public_path() . \Config::get("fpath.thum").$lastInsertedId . "/thum." .pathinfo($request->thumbnail, PATHINFO_EXTENSION)); 50 } 51} 52
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateMUploadersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create("m_uploaders", function (Blueprint $table) { $table->increments("id"); $table->string("user_name")->comment("名前"); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists("m_uploaders"); } }
試したこと
意外と簡単だったLaravelで画像アップロードテスト
Laravelで始めるTDD開発 (1):簡単なテストコードを書く
こちらを参考にして書いてみたのですが、肝心のアップロードの部分がわからず…。
今はとりあえず直接データベースにユーザーネームを追加して、アップロード先のフォルダに作成したダミー画像を移動させて無理矢理表示させていますが、多分こういうことじゃないよなぁと思いつつ他に方法が全く思いつかず詰まっております。
初心者のためわからないことばかりですが、ご教授の程、どうぞ宜しくお願い致します。
補足情報(FW/ツールのバージョンなど)
Laravel5.6
PHP7.2
CentOS7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。