PHPの人気のフレームワークLaravelではWebサイトの管理画面を開発することができます。
開発の手順に関しては以下の記事にて具体的に紹介をしていきました。
さらに開発後のデプロイの手順は以下で解説していきました。
この記事ではPHPUnitでLaravelのAPIテストをする方法について解説しています。
におすすめの記事となっています。これを読めばいよいよLaravelで開発した管理画面をリリースする準備ができますよ。
まず作業の前に、最低限やりたいことを決めておきます。
今回はLaravelの認証後のAPIのテストを書けるようにしたいので、以下の要件にしました。
● CookieのAPI認証の部分はテストせず、認証済として扱う
● 認証後の管理者ユーザーの一覧取得のAPIをテストする
Cookie認証のAPIは以前の記事で実装したものを利用します。
CookieによるAPI経由のユーザー認証機能を作る【Laravel6とNuxt.jsで作る管理画面】
LaravelではデフォルトでPHPUnitが使えるようになっていますが、
実際にテスト書いていくためには、いくつか準備が必要なので、そちらを進めていきます。
開発環境のデータに影響を与えないようにするため、まずは、以下コマンドを実行してテスト用のDBを作成しましょう。
mysql> create database laravel_test;
PHPUnitではデフォルトでsqlite
を使う設定になっていますが、本番DBと環境を揃えるため、テストでもMySQLを使うようにします。
次に下記コマンドでテスト用の.envファイルを作成します。
cp .env.example .env.testing
ファイルが作成できたら、以下の内容で.env.testing
を修正します。
APP_NAME=Laravel
//testingに変更
APP_ENV=testing
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
//追加したデータベース名に変更
DB_DATABASE=laravel_test
DB_USERNAME=root
DB_PASSWORD=
修正が完了したら、次に以下コマンドでテスト用のAPP_KEY
を作成します。
php artisan key:generate --env=testing
以下のような値が.env.testing
に作成されればOKです。
APP_KEY=base64:XXXXXXX
次に以下の内容でphpunit.xml
を変更します。
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
//ここを変更
<server name="DB_CONNECTION" value="mysql"/>
<server name="MAIL_DRIVER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
</php>
PHPUnitは.env.{APP_ENVの値}
の.envファイルを自動で読み込む作りになっています。
そのため、DB_DATABASE
は.env.testing
の値が設定されるので、phpunit.xml
側からは削除しています。
次に以下コマンドを実行します。
php artisan migrate --env=testing
以下のようにマイグレーションが反映されればOKです。
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.05 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (0.06 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (0.03 seconds)
Migrating: 2020_05_09_010620_create_admin_users_table
Migrated: 2020_05_09_010620_create_admin_users_table (0.05 seconds)
事前準備が完了したので、ここからは実際にテストを書いていきます。
Laravelでは、testsディレクトリの下にFeatureディレクトリとUnitディレクトリがあり、
この中にテストコードを配置します。
FeatureにはController
やMiddleware
といったHTTPリクエストによる機能テスト、Unitにはそれ以外の単体テストについて書きます。
それ以外のディレクトリ構成にすることも出来ますが、基本の構成を踏襲した方が可読性が上がって良いでしょう。
今回はAPIのテストなので、Featureテストを書いていきます。
まず以下のコマンドでFeatureテストのファイルを作成します。
php artisan make:test Api/AdminUserTest
次のような内容のtests/Feature/Api/AdminUserTest.php
が作られていればOKです。
<?php
namespace Tests\Feature\Api;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
class AdminUserTest extends TestCase
{
/**
* A basic feature test example.
*
* @return void
*/ public function testExample()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
Laravelは設定ファイルをキャッシュして高速化しているため、DBを扱うテストコードを実行する前には php artisan config:clear
を実行することが公式ドキュメントで勧められています。
これをしておかないと、キャッシュで本番DBがリセットされてしまうという問題も起こりかねません。
そのため、以下の内容のtest.sh
というスクリプトファイルを作成します。
#!/bin/bash
php artisan config:clear
./vendor/bin/phpunit tests/Feature/Api
ファイルが出来たら下記コマンドでテストを実行します。
chmod +x test.sh //実行権限を付与(最初の1回だけでOK)
./test.sh
以下のような画面が出ればOKです。
ログインのテストをするために管理者ユーザーのアカウントを作成します。
こういったテスト用データの用意には、Factoryを使いましょう。
以下コマンドで管理者ユーザー用のFactoryを作成します。
php artisan make:factory AdminUserFactory --model=AdminUser
作成されたdatabase/factories/AdminUserFactory.php
を以下内容に編集します。
<?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\AdminUser;
use Faker\Generator as Faker;
$factory->define(AdminUser::class, function (Faker $faker) {
static $password;
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => $password ?: $password = bcrypt('secret'),
'remember_token' => Str::random(10),
];
});
これで管理者ユーザーを作ることが出来るようになりました。
次にtests/Feature/Api/AdminUserTest.php
を以下の内容に編集します。
<?php
namespace Tests\Feature\Api;
use App\AdminUser;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
class AdminUserTest extends TestCase
{
// テストデータのリセット
use RefreshDatabase;
// ミドルウェアの無効化
use WithoutMiddleware;
private $adminUser;
public function testIndex()
{
// テストデータをFactoryで作成
$adminUser1 = factory(AdminUser::class)->create();
$adminUser2 = factory(AdminUser::class)->create();
$response = $this->json('GET', '/api/admin_users');
$response
->assertStatus(200)
->assertJson(
[
[
'id' => $adminUser1->id,
'name' => $adminUser1->name,
'email' => $adminUser1->email,
],
[
'id' => $adminUser2->id,
'name' => $adminUser2->name,
'email' => $adminUser2->email,
]
]
);
}
}
Laravelでは便利な共通処理がtrait
として提供されており、上記のコードではRefreshDatabase
とWithoutMiddleware
を利用しています。
今回使っているAPIではAjax以外の通信を403エラーにするMiddleware
を指定していますが、テストでは不要なため除外するようにしています。
編集できたら、テスト実行後に以下のコマンドを実行します。
php artisan tinker --env=testing
テストが成功し、以下のようにデータがリセットされていればOKです。
今回はPHPUnitでLaravelの認証付きAPIのテストを行いました。
本記事では一覧取得のテストケースのみ紹介しましたが、同様にCRUDのテストケースを書けますね。
本日紹介したようなものを外注してみるのはいかがでしょうか。 dehaソリューションズではオフショア開発によって低コストで迅速な開発をサポートしています。
Laravelに関して詳しくお話を聞きたい方、開発相談や無料お見積りをしたい方はこちらからご気軽にお問い合わせください。
▼ dehaソリューションへの簡単見積もりの依頼はこちら
ビジネスや社会のあらゆる場面でシステムが欠かせない現代において、システム開発を効率的かつ確実に進めるための枠組みとして「システム開発ライフサイクル(SDLC:System Development Life Cycle)」が存在します。 SDLCは、システムを企画・開発・運用・保守するまでの一連の流れを定義したもので、開発プロジェクトを成功させるための道しるべといえます。 この記事では、システム開発ライフサイクルの基本的な考え方と、主要な開発フェーズ、さらに代表的な開発モデルについて解説します。 システム開発を発注・管理する立場の方 IT人材が不足している方 システム開発ライフサイクルの具体的内容が知りたい方 これらに当てはまる方におすすめの記事となっています。これを読めばシステム開発を効率的に進める方法が丸わかりですよ。 (more…)
システム開発が完了した後、安定して稼働させるためには「システム保守」が欠かせません。 しかし実際に見積もりを取ると、費用が高いと感じる企業も多いのではないでしょうか。 この記事では、システム保守の費用相場を解説するとともに、コストを抑えるための具体的な方法を徹底的に紹介します。 これから保守契約を検討する方 すでに保守契約しているが見直したい方 システム保守の費用について知りたい方 これらに当てはまる方におすすめの記事となっています。これを読めばシステム保守にいくらかかるのかや、費用を抑えるためのポイントも丸わかりですよ。 (more…)
2017年の起業から今まで、DEHA SOLUTIONSが歩んできた9年間は、お客様と社員の皆様からのご支援とご協力なくしては語ることができません。心より感謝申し上げます。 私たちはこの間、ベトナムを開発拠点とするシステム開発企業として、日本国内のIT市場向け様々な課題に真摯に向き合ってまいりました。2019年に発表された経済産業省によるIT人材需給に関する調査によると、2030年の日本国内におけるIT人材は最大で約79万人が不足すると予測されています。この深刻な状況の中、多くのSIer企業様や中小・大企業様の開発パートナーとしては、高品質で開発及びソリューションを安定的に提供することで、日本のIT業界の成長を支える一翼を担っています。 >>関連記事:日本経済産業省によると2030年には最大で約79万人のIT人材が不足 近年、ビジネス環境は急速に変化し、DXの波が隅々にまで浸透することに加え、AI技術も全産業を席巻しています。DEHAマガジンでも度々記事を取り上げてきたように、現在AIは単なるトレンドではなく、未来の社会を形作る基盤となりつつあります。 そんな大きな時代の変化を捉え、私たちDEHA SOLUTIONSはこれまでの9年間で培ってきた豊富なナウハウで、AI分野に注力を決意しました。単なる技術ベンダに留まらずに、お客様にとって最も信頼性があるAI総合ソリューション開発パートナーとしては、共に課題解決及びビジネス発展にしていくことを目指してまいります。 (more…)
開発の現場では「人が足りない」「スキルが合わない」「今すぐ増強したい」が日常茶飯事です。 そこでこの記事では、①オフショア開発 ②ニアショア開発 ③フリーランス・業務委託 ④SES ⑤社内のリソース強化(社員育成・ノーコード/ローコード・AI活用)の5つ手段を、スピード/コスト/品質確保/管理負荷/機密性/拡張性で徹底比較し、選び方の指針まで一気通貫で整理します。 開発を効率化させたい方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めば開発リソースを確保するためのそれぞれの手段について、特徴がわかりますよ。 (more…)
近年、IT人材不足が深刻化する日本市場では、オフショア開発の活用がますます一般的になっています。 なかでも、ベトナムは高い技術力とコスト競争力を兼ね備えた国として、依然として人気を維持しています。 この記事では、2025年最新のベトナムオフショア開発における人月単価相場を役割別に解説し、最新動向までを詳しくご紹介します。 ベトナムオフショアに興味がある方 開発コストを抑えたいとお考えの方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めばベトナムオフショアの具体的なコストがわかりますよ。 (more…)
2025年8月時点におけるドル/円(USD/JPY)の為替レートは、およそ ¥146.9です。 円安傾向は続いており、過去数十年のトレンドとも重なりつつ、依然として投資・政策動向から注目を浴びています。 この記事ではそんな円安に着目してオフショア開発に与える影響を見ていこうと思います。 オフショア開発を始めたい方 社内のIT人材が不足している方 開発効率を上げたい方 これらに当てはまる方におすすめの記事となっています。これを読めばオフショア開発に円安がどう影響するのかがわかるのはもちろん、いつ始めるべきかまで丸わかりですよ。 (more…)