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

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

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

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

PHPUnit

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

Q&A

解決済

PHPUNITでのテストに関して

color
color

総合スコア90

PHP

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

PHPUnit

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

2回答

0グッド

0クリップ

234閲覧

投稿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メソッドでエラーが発生せず終えるもしくは、
第三引数の文字リテラルを入れ替える
を実現したいです。
途中参画のため、テストメソッドのみの修正で実現したく、
もし何かご存知でしたら教示頂けると幸いです。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

1

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

総合スコア3706

wai_👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

2022/08/16 11:01

こちらの回答が他のユーザーから「過去の低評価」という指摘を受けました。

回答へのコメント

color

2022/08/16 09:24

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

2022/08/16 09:40 編集

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

0

ベストアンサー

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

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

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

投稿2022/08/16 10:33

maisumakun

総合スコア141519

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

PHP

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

PHPUnit

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