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

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

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

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

2回答

5308閲覧

LaravelのテストがLinuxだとコケる

nnahito

総合スコア2004

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/08/01 06:26

編集2022/01/12 10:55

質問

Laravel5.8のテスト(PHPUnit)が、Windows10だと正常実行できるのに、
CentOS7上だと以下のエラーを吐いて失敗してしまいます。
この解決方法をご教示いただけると幸いです。。。

PHP Warning: include(/home/gitlab-runner/builds/53cca28f/0/vendor/composer/../phpunit/phpunit/src/Util/FileLoader.php): failed to open stream: No such file or directory in /home/gitlab-runner/builds/53cca28f/0/vendor/composer/ClassLoader.php on line 444 PHP Warning: include(): Failed opening '/home/gitlab-runner/builds/53cca28f/0/vendor/composer/../phpunit/phpunit/src/Util/FileLoader.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /home/gitlab-runner/builds/53cca28f/0/vendor/composer/ClassLoader.php on line 444 PHP Fatal error: Uncaught Error: Class 'PHPUnit\Util\FileLoader' not found in /home/gitlab-runner/builds/53cca28f/0/vendor/phpunit/phpunit/src/TextUI/Command.php:1058 Stack trace: #0 /home/gitlab-runner/builds/53cca28f/0/vendor/phpunit/phpunit/src/TextUI/Command.php(863): PHPUnit\TextUI\Command->handleBootstrap('/home/gitlab-ru...') #1 /home/gitlab-runner/builds/53cca28f/0/vendor/phpunit/phpunit/src/TextUI/Command.php(173): PHPUnit\TextUI\Command->handleArguments(Array) #2 /home/gitlab-runner/builds/53cca28f/0/vendor/phpunit/phpunit/src/TextUI/Command.php(162): PHPUnit\TextUI\Command->run(Array, true) #3 /home/gitlab-runner/builds/53cca28f/0/vendor/phpunit/phpunit/phpunit(61): PHPUnit\TextUI\Command::main() #4 {main} thrown in /home/gitlab-runner/builds/53cca28f/0/vendor/phpunit/phpunit/src/TextUI/Command.php on line 1058

環境

  • windows10
  • CentOS7
  • PHP 7.2.10
  • Laravel 5.8.30

質問詳細

実機はWindows10で、開発を行っております。
テストを書き、下記コマンドをコマンドプロンプト(cmd)で実行すると、テストが正常に実行されました。

"vender/bin/phpunit"

ソースコードをgitlabで管理しているため、CIツールはgitlab-runnerを使っています。
runner上でテストを自動実行させようとしているのですが、上記のような、

PHP Fatal error: Uncaught Error: Class 'PHPUnit\Util\FileLoader' not found

というエラーが出てしまいます。


実際、デプロイ先の本番環境(CentOS7)で 、

vender/bin/phpunit

を叩くと、同様のエラーが発生します。
なお、

php vender/bin/phpunit

を叩くと、シェル文(if ... fiなど)がそのままプリントされます。

もちろん、

./vender/bin/phpunit

なども試しましたが結果は一緒でした。


この原因は何なのでしょうか…?
Windowsで実行できていて、Linuxで実行できないというのがまた不思議で……
ご存知の方がいらっしゃいましたら、ご教示いただけますと幸いです。
よろしくお願いいたします。


あまり関係はないと思いますが、テストコードは以下です。

<?php namespace Tests\Unit; use Tests\TestCase; class HogeControllerTest extends TestCase { public function testIndex() { $response = $this->get(action('HogeController@index')); $response->assertStatus(200); } public function testTop() { $response = $this->get(action('HogeController@top')); $response->assertStatus(200); } }

composer json

{ "name": "laravel/laravel", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "type": "project", "require": { "php": ">=7.1.3", "abraham/twitteroauth": "^0.7.4", "curl/curl": "^1.8", "fideloper/proxy": "~4.0", "laravel/framework": "5.8.*", "laravel/slack-notification-channel": "^2.0", "laravel/tinker": "~1.0", "ext-mbstring": "*", "ext-fileinfo": "*" }, "require-dev": { "filp/whoops": "~2.0", "fzaninotto/faker": "~1.4", "mockery/mockery": "0.9.*", "phpunit/phpunit": "^7.5" }, "autoload": { "classmap": [ "database/seeds", "database/factories" ], "psr-4": { "App\": "app/" } }, "autoload-dev": { "psr-4": { "Tests\": "tests/" } }, "extra": { "laravel": { "dont-discover": [ ] } }, "scripts": { "post-root-package-install": [ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "@php artisan key:generate" ], "post-autoload-dump": [ "Illuminate\Foundation\ComposerScripts::postAutoloadDump", "@php artisan package:discover" ] }, "config": { "preferred-install": "dist", "sort-packages": true, "optimize-autoloader": true } }

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/08/01 06:45

composer installは行っているでしょうか? また、PHPUnitがcomposer.jsonでrequire-devに入っていてrequireしかインストールしていない可能性はないでしょうか?
nnahito

2019/08/01 06:51

> composer installは行っているでしょうか? はい行っております。 vendorフォルダを一度全削除し、その後再度composer installを行ってもだめでした。 > PHPUnitがcomposer.jsonでrequire-devに入っていてrequireしかインストールしていない可能性 こちら私の無知で申し訳ないのですが、require-devとrequireの違いを教えていただいてもよろしいでしょうか…?
m.ts10806

2019/08/01 06:59

composer.jsonの内容を提示されたほうが早いですね。
m.ts10806

2019/08/01 07:01

単にPHPUnitが導入されてないだけにも見えます。
nnahito

2019/08/01 07:06

今追記しました。 もしかして、、、「"require-dev"」の項目にしか「phpunit/phpunit」がないからでしょうか?
m.ts10806

2019/08/01 07:10

あでも、そういえば、5.8なら最初から含まれてましたね。 PHPUnit\Util\FileLoaderクラスファイルはちゃんとありますか?
nnahito

2019/08/01 07:20 編集

> あでも、そういえば、5.8なら最初から含まれてましたね。 すいません!ここちょっと疑問で、 プロジェクトを作成したときは5.5だったんですよ…… で、順繰りにアップデートしていって、5.8にして動かしており、 最近「テスト書こう!」とはじめてみて、コケたんです… > PHPUnit\Util\FileLoaderクラスファイルはちゃんとありますか? 「vendor/phpunit」配下にUtilフォルダがありませんね… 「vendor/phpunit/phpunit/src/」配下にFileloader.phpがあります!
hentaiman

2019/08/01 22:05

composer require --dev hogehogeでの直接インストールは試したんですか?
nnahito

2019/08/02 00:45

そちらは試していません。 composer require --dev hogehogeの「hogehoge」の部分は何を指定したら良いのでしょうか? Laravelを使っているので「laravel/laravel」? それとも「phpunit/phpunit」?
hentaiman

2019/08/02 00:49

あとlaravelの環境変数REQUIRE_DEVの設定を忘れずにね 安易に--dev無しでインストールしないようにご注意
guest

回答2

0

Windowsが
Linuxが/
のせいだったりしません?

投稿2019/08/01 08:05

yukky1201

総合スコア2751

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

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

nnahito

2019/08/01 10:15

ご回答ありがとうございます。 バックスラッシュの件ですが、両方とも通常のスラッシュ(`/`)で確認しております。。。
guest

0

"phpunit/phpunit": "^7.5"

バージョンにより構成が違うとかはあるかもしれません。
phpunit/phpunit
最新は8系のようですね。

念のため、最新入れてみてください。

投稿2019/08/01 07:28

m.ts10806

総合スコア80765

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

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

退会済みユーザー

退会済みユーザー

2019/08/01 07:59

https://readouble.com/laravel/5.8/ja/upgrade.html > Laravel5.8ではPHPUnit7をデフォルトで使用します。しかしながら、PHP7.2以上が必要なPHPUnit8へアップグレードする選択肢もあります。詳細は、PHPUnit8のリリースアナウンスメントの変更一覧へ一通り目を通してください。 7であること自体は問題なさそうです。 また、8に上げた場合、PHP7.2以上が必須になるので注意です。
m.ts10806

2019/08/01 08:08

補足ありがとうございます。 手元の環境(7.1)だとphpunit/phpunit/src/Util内にFileLoaderがあったので、7.5は違うのかなと思ってましたが、そういうことではなさそうですね。試しに8.2.5入れてみたらそこのフォルダ階層は変わってませんでした。
nnahito

2019/08/01 10:16

ご回答ありがとうございます。 すいません、先程確認したら、サーバのPHPのバージョンは7.3でした。 Winのほうが7.2なので動いたのかな…… 家に戻ったらこちら行ってみます。
nnahito

2019/08/01 15:55

PHPUnit 8.2.5にアップデートしても同様のエラーが発生しました… またサーバのPHPのバージョンは、 PHP 7.3.6 (cli) (built: May 28 2019 09:32:59) ( NTS ) でした
m.ts10806

2019/08/01 20:45

あと気になるのはinclude_pathかなあと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問