前提・実現したいこと
「入門Laravelチュートリアル (6) ToDoアプリのタスク作成機能を作る」
https://www.hypertextcandy.com/laravel-tutorial-create-task/
を参照して、Laravelの学習をしながらTODOアプリを作成しています。
ただし、環境が一部異なり、Dockerコンテナ内でlaravelをインストールしています。
上記記事内でテストコードを作成してphpunitを実行する過程があるのですが、私の環境ではphpunitコマンドは何も返してくれません。
エラーも吐き出しません。何の反応もないため困っています。Dockerコンテナ内ではphpunitコマンドは実施できないのでしょうか。
そんなわけないと思うので、環境が良くないのかなと困惑しています。
Docker内でもphpunitが動作したという方や、何か心当たりのある方がいらっしゃればアドバイスお願いします。
●環境
(Docker appコンテナ1)
laravel6.0
PHP 7.3.13
phpunit 8.5.1
(Docker dbコンテナ2)MySQL8.0
(Docker webコンテナ3)nginx:1.17-alpine
●Dockerのlaravel環境構築のベース
【初心者向け】20分でLaravel開発環境を爆速構築するDockerハンズオン
https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4
発生している問題・エラーメッセージ
作業フォルダ内で
$ docker-compose exec app ash
上記コマンドを入力してDockerコンテナ内に入ってから、下記コマンドを入力しても何の反応もありません。
/work # ./vendor/bin/phpunit ./tests/Feature/TaskTest.php --testdox /work #
すぐに次のコマンドが入力可能な状態になります。
テスト確認用のソースコード
php
1<?php 2 3namespace Tests\Feature; 4 5use Illuminate\Foundation\Testing\RefreshDatabase; 6use Illuminate\Foundation\Testing\WithFaker; 7use Tests\TestCase; 8use Carbon\Carbon; 9use App\Http\Requests\CreateTask; 10 11class TaskTest extends TestCase 12{ 13 // テストケースごとにデータベースをリフレッシュしてマイグレーションを再実行する 14 use RefreshDatabase; 15 16 /** 17 * 各テストメソッドの実行前に呼ばれる 18 */ 19 public function setUp() 20 { 21 parent::setUp(); 22 23 // テストケース実行前にフォルダデータを作成する 24 $this->seed('FoldersTableSeeder'); 25 } 26 27 /** 28 * 期限日が日付ではない場合はバリデーションエラー 29 * @test 30 */ 31 public function due_date_should_be_date() 32 { 33 $response = $this->post('/folders/1/tasks/create', [ 34 'title' => 'Sample task', 35 'due_date' => 123, // 不正なデータ(数値) 36 ]); 37 38 $response->assertSessionHasErrors([ 39 'due_date' => '期限日 には日付を入力してください。', 40 ]); 41 } 42 43 /** 44 * 期限日が過去日付の場合はバリデーションエラー 45 * @test 46 */ 47 public function due_date_should_not_be_past() 48 { 49 $response = $this->post('/folders/1/tasks/create', [ 50 'title' => 'Sample task', 51 'due_date' => Carbon::yesterday()->format('Y/m/d'), // 不正なデータ(昨日の日付) 52 ]); 53 54 $response->assertSessionHasErrors([ 55 'due_date' => '期限日 には今日以降の日付を入力してください。', 56 ]); 57 } 58} 59
試したこと
1-1.記事に指定されたことはすべて実施しています。config/database.php の connections に設定を追加
<?php use Illuminate\Support\Str; return [ /* |-------------------------------------------------------------------------- | Default Database Connection Name |-------------------------------------------------------------------------- | | Here you may specify which of the database connections below you wish | to use as your default connection for all database work. Of course | you may use many connections at once using the Database library. | */ 'default' => env('DB_CONNECTION', 'mysql'), /* |-------------------------------------------------------------------------- | Database Connections |-------------------------------------------------------------------------- | | Here are each of the database connections setup for your application. | Of course, examples of configuring each database platform that is | supported by Laravel is shown below to make development simple. | | | All database work in Laravel is done through the PHP PDO facilities | so make sure you have the driver for your particular database of | choice installed on your machine before you begin development. | */ 'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', 'url' => env('DATABASE_URL'), 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), ], 'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], 'pgsql' => [ 'driver' => 'pgsql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, 'schema' => 'public', 'sslmode' => 'prefer', ], 'sqlsrv' => [ 'driver' => 'sqlsrv', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '1433'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, ], // ★ テスト用にこの設定を追加 'sqlite_testing' => [ 'driver' => 'sqlite', 'database' => ':memory:', 'prefix' => '', ], ], (・・・省略・・・) ];
1-2.記事に指定されたことはすべて実施しています。設定ファイル phpunit.xml に DB_CONNECTION の設定を追加
<?xml version="1.0" encoding="UTF-8"?> <phpunit backupGlobals="false" backupStaticAttributes="false" bootstrap="vendor/autoload.php" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false"> <testsuites> <testsuite name="Unit"> <directory suffix="Test.php">./tests/Unit</directory> </testsuite> <testsuite name="Feature"> <directory suffix="Test.php">./tests/Feature</directory> </testsuite> </testsuites> <filter> <whitelist processUncoveredFilesFromWhitelist="true"> <directory suffix=".php">./app</directory> </whitelist> </filter> <extensions> <extension class="Tests\Bootstrap"/> </extensions> <php> <server name="APP_ENV" value="testing"/> <server name="DB_CONNECTION" value="sqlite_testing"/> <!--★ この行を追加--> <server name="BCRYPT_ROUNDS" value="4"/> <server name="CACHE_DRIVER" value="array"/> <server name="MAIL_DRIVER" value="array"/> <server name="QUEUE_CONNECTION" value="sync"/> <server name="SESSION_DRIVER" value="array"/> <server name="APP_CONFIG_CACHE" value="bootstrap/cache/config.phpunit.php"/> <server name="APP_SERVICES_CACHE" value="bootstrap/cache/services.phpunit.php"/> <server name="APP_PACKAGES_CACHE" value="bootstrap/cache/packages.phpunit.php"/> <server name="APP_ROUTES_CACHE" value="bootstrap/cache/routes.phpunit.php"/> <server name="APP_EVENTS_CACHE" value="bootstrap/cache/events.phpunit.php"/> </php> </phpunit>
2.Dockerの再起動も実施しています。
3.下記コマンドを実施してphpunitのバージョン確認もしています。(--helpにも応答あり)
/work # ./vendor/bin/phpunit --version PHPUnit 8.5.1 by Sebastian Bergmann and contributors. /work #
4.composer は最新にアップデート
/work # composer self-update You are already using composer version 1.9.1 (stable channel).
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。