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

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

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

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

Laravel 5

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

6864閲覧

LaravelでPHPUnitを利用してAPIのテストしたいが、全て500エラーで返ってくる

W_N

総合スコア15

PHPUnit

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

Laravel 5

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2017/09/29 07:11

編集2017/09/29 12:55

困っていること

Laravelで作成したAPIをPHPUnitでテストしようとしています。しかしブラウジングできるにも関わらず、テスト上では全て500エラーが返ってきてしまいます。なぜ?

PHPUnit実行結果

プロジェクトディレクトリ内でphpunitを実行した結果です。
イメージ説明

API自体は生きている模様

イメージ説明

前提

  • Laravel 5.4
  • homesteadで環境構築

ルーティング

PHP

1use Illuminate\Http\Request; 2use App\Models\Rental; 3 4Route::group(['middleware' => 'api'], function() { 5 Route::resource('rentals', 'RentalController'); 6});

コントローラー

php

1namespace App\Http\Controllers; 2 3use Illuminate\Http\Request; 4use App\Models\Rental; 5 6class RentalController extends Controller 7{ 8 public function index(Request $request) 9 { 10 return Rental::take(5)->get(); 11 } 12 public function show($id) 13 { 14 return Rental::find($id); 15 } 16}

phpunit.xml

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<phpunit backupGlobals="false" 3 backupStaticAttributes="false" 4 bootstrap="vendor/autoload.php" 5 colors="true" 6 convertErrorsToExceptions="true" 7 convertNoticesToExceptions="true" 8 convertWarningsToExceptions="true" 9 processIsolation="false" 10 stopOnFailure="false"> 11 <testsuites> 12 <testsuite name="Feature"> 13 <directory suffix="Test.php">./tests/Feature</directory> 14 </testsuite> 15 16 <testsuite name="Unit"> 17 <directory suffix="Test.php">./tests/Unit</directory> 18 </testsuite> 19 </testsuites> 20 <filter> 21 <whitelist processUncoveredFilesFromWhitelist="true"> 22 <directory suffix=".php">./app</directory> 23 </whitelist> 24 </filter> 25 <php> 26 <env name="APP_ENV" value="testing"/> 27 <env name="DB_CONNECTION" value="mysql"/> 28 <env name="DB_DATABASE" value="sample_test"/> 29 <env name="CACHE_DRIVER" value="array"/> 30 <env name="SESSION_DRIVER" value="array"/> 31 <env name="QUEUE_DRIVER" value="sync"/> 32 </php> 33</phpunit>

config/database.php

php

1//... 2'connections' => [ 3 4 'sqlite' => [ 5 'driver' => 'sqlite', 6 'database' => env('DB_DATABASE', database_path('database.sqlite')), 7 'prefix' => '', 8 ], 9 10 'mysql' => [ 11 'driver' => 'mysql', 12 'host' => env('DB_HOST', '127.0.0.1'), 13 'port' => env('DB_PORT', '3306'), 14 'database' => env('DB_DATABASE', 'sample'), 15 'username' => env('DB_USERNAME', 'homestead'), 16 'password' => env('DB_PASSWORD', 'secret'), 17 'unix_socket' => env('DB_SOCKET', ''), 18 'charset' => 'utf8mb4', 19 'collation' => 'utf8mb4_unicode_ci', 20 'prefix' => '', 21 'strict' => true, 22 'engine' => null, 23 ],] 24//...

tests/Feature/RentalTest.php

php

1namespace Tests\Feature; 2 3use Tests\TestCase; 4use Illuminate\Foundation\Testing\WithoutMiddleware; 5use Illuminate\Foundation\Testing\DatabaseMigrations; 6 7class RentalTest extends TestCase 8{ 9 10 public function testBasicTest() 11 { 12 $response = $this->get('/api/rentals')->assertStatus(200); 13 } 14 15}

よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

500エラーの場合は、Laravelアプリのstorage/logs/laravel.logかLaravelまで処理が到達していない場合は、apacheやnginx等のWebサーバのエラーログにエラー内容が出力されているかと思うので参照してください。

ブラウザでアクセスすると、Webサーバーがアプリを動かすユーザーですが、PHPUnitの場合はCLIのため実行ユーザーが違うので、ファイル権限エラー等がおきていること等も一例として考えられます。

投稿2017/09/29 08:20

aro10

総合スコア4106

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

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

0

結果からいうと、ローカルのプロジェクトディレクトリ内で直接vendor/bin/phpunitコマンドを実行していたことが原因でした。Laravelのプロジェクトで、homesteadを使いつつphpunitを実行したい場合、以下の手順を踏む必要があります。

  1. vagrant up (仮想環境立ち上げ)
  2. vagrant ssh (SSHログイン)
  3. 仮想環境のプロジェクトディレクトリでvendor/bin/phpunit
  4. できた!

イメージ説明

私の手順は以下の通り。。。2が間違いです。

  1. vagrant up (仮想環境立ち上げ)
  2. そのままローカルのプロジェクトディレクトリ内でvendor/bin/phpunit
  3. SQLSTATE[HY000] [2002] Connection refused ...というエラーで接続失敗

投稿2017/09/29 13:02

W_N

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問