質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

Q&A

解決済

1回答

684閲覧

Laravel5.6 画像アップロードのテスト

nezuko

総合スコア12

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

0グッド

0クリップ

投稿2018/08/28 14:29

前提・実現したいこと

画像アップロード(基本)
こちらを参考に、名前を入力して画像を選択→確認→アップロード完了 という流れで画像をアップロードして一覧表示させるプログラムを作成しました。

実行するとダミーの画像をアップロードできるようなテストを作りたいのですが、イマイチどうすれば良いのかわかりません。

発生している問題・エラーメッセージ

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

fakerやら色々使ってなんとか自己解決しました。

投稿2019/02/28 03:53

nezuko

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問