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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPUnit

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

Q&A

解決済

2回答

310閲覧

PHPUNITでのテストに関して

color

総合スコア90

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPUnit

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

0グッド

0クリップ

投稿2022/08/16 09:06

前提

PHPUNITにてスタブかな??やり方ご存知ならご助言頂きたいです。

PHP

1public function testUpload(){ 2 Storage::fake('file'); 3 $uploadedFile = UploadedFile::fake()->image('test.jpg'); 4 $response = $this->json( 5 'POST', 6 '/test/upload', 7 ['file' => $uploadedFile] 8 ); 9 $response->assertSuccessful(); 10}

こんなテストメソッドがあります。
これが実行されると、ルーティングによって以下のメソッドが動きます。

php

1public function upload(Request $request){ 2 // かなり省略しています。 3 $file = $request->file('file'); 4 $file->storeAs('upload', $filename, 's3'); 5}

実現したいこと

ローカルだと以下で失敗します、理由はローカルにs3がない為です。
$file->storeAs('upload', $filename, 's3');
その為、テストでしたい事は、
storeAsメソッドでエラーが発生せず終えるもしくは、
第三引数の文字リテラルを入れ替える
を実現したいです。
途中参画のため、テストメソッドのみの修正で実現したく、
もし何かご存知でしたら教示頂けると幸いです。

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

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

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

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

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

guest

回答2

0

php

1 $file->storeAs('upload', $filename, 's3');

ここの第3引数で、「s3」を指定せず、

php

1 $file->storeAs('upload', $filename);

とします。

php

1// ./config/filesystems.php 2 3 4return [ 5 6 /* 7 |-------------------------------------------------------------------------- 8 | Default Filesystem Disk 9 |-------------------------------------------------------------------------- 10 | 11 | Here you may specify the default filesystem disk that should be used 12 | by the framework. The "local" disk, as well as a variety of cloud 13 | based disks are available to your application. Just store away! 14 | 15 */ 16 17 'default' => env('FILESYSTEM_DRIVER', 'local'), 18}

デフォルトの保存先は、config/filesystems.php に設定されていますので、下記をみると、.env で FILESYSTEM_DRIVER の値で指定できます。

本番サーバーで使用する .env には「s3」を指定し、テストでは、「local」を指定すればOKです。

投稿2022/08/16 09:21

phper.k

総合スコア3923

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

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

color

2022/08/16 09:24

コメントありがとうございます。 ただ、記載した通り、 > 途中参画のため、テストメソッドのみの修正で実現したく、 > もし何かご存知でしたら教示頂けると幸いです。 なので、運用中のメソッドは修正しないで実現したいのです。」
phper.k

2022/08/16 09:40 編集

実装で $file->storeAs('upload', $filename, 's3'); こうしている以上無理に決まってるじゃん そもそも実装のバグなんだから修正対象でしょう
guest

0

ベストアンサー

理由はローカルにs3がない為です。

ローカルでも(テスト専用にバケットを立てるなどして)S3に接続設定を行う、という選択肢はないのでしょうか。

AWS上でも、(あえてそういう特殊なサーバを立てる状況でなければ)サーバ上に直接S3がある訳ではなく、単にS3へ接続しているだけです。

投稿2022/08/16 10:33

maisumakun

総合スコア145121

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問