4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Laravel7】PHPUnitの設定をしてテストを実行してみる

Posted at
はじめに

プロジェクトを作成するたびにPHPUnitの設定方法忘れて都度調べてるので、忘備録として残して忘れないようにしておきたいと思います。
PHPUnitの設定方法は何通りかあるかと思いますが、この記事では SQLiteのインメモリ機能 を用いて開発用のDBを汚さない設定方法を使用します。

実行環境

今回PHPUnitの設定は下記のバージョンで行います。厳密に同じ環境でなくてもメジャーバージョンがあっていれば同様の設定で動くかと思います。

言語・ツール バージョン
Laravel 7.10.3
PHP 7.2.26
PHPUnit 8.5.4

設定方法

PHPerからするとMySQLと比較してあまり馴染みがないかもしれませんが、本記事ではテスト用DBにSQLiteを使用します。

SQLiteとは?
SQLiteはオープンソースのリレーショナルデータベースです。主に以下の特徴を持っています。

・サーバ側に設置する必要がなく、アプリケーションに組み込みこんで使用することができる
・動作が軽量
・データ量の少ないデータを扱うのに適している
・ローカルのファイルを直接データベースとして扱うので、複数のサーバとネットワーク越しに同時接続するのには不向き

インメモリ機能とは?
インメモリ機能(インメモリデータベース)とはデータストレージを主にメインメモリ上で管理する、データベースシステムです。今回の場合ですと、PHPUnitでテスト実行時にメモリにデータベースが作成されて、テスト終了時にデータベースは存在しなくなります。そのため開発用のデータベースを汚さずにテストを実行することができます。

設定
それでは実際に、設定をしていきましょう。

まずはデータベースの接続設定をconfig/datbase.phpに追加します。databaseの項目に:memory:を指定している点がポイントです。こうすることによりデータベースのメインメモリ機能を使用することができます。

database.php
'connections' => [
  ....
  ....
  'testing' => [
    'driver'   => 'sqlite',
    'database' => ':memory:', // SQLiteのインメモリ機能を使用
    'prefix'   => '',
    'options'  => [
      PDO::ATTR_PERSISTENT => false,
    ],
  ],
],

次にPHPUnitの設定を行います。<server>にて環境変数が指定されるので、DB_CONECTIONを追加して、値を上記のconfig/database.phpで設定したキーtestingを使用します。

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="sqlite"/>
    <server name="DB_DATABASE" value=":memory:"/>
    <server name="MAIL_MAILER" value="array"/>
    <server name="QUEUE_CONNECTION" value="sync"/>
    <server name="SESSION_DRIVER" value="array"/>
    <server name="TELESCOPE_ENABLED" value="false"/>
    <server name="DB_CONNECTION" value="testing"/>  // この行を追加
  </php>

テストの実行
Laravelのプロジェクトを作成した際にデフォルトで用意されているExampleTest.phpを実行してテストが通るか確認します。テスト結果が下記のようにOKとなれば正しくPHPUnitの設定ができているかと思います。

$ vendor/bin/phpunit tests/Feature/ExampleTest.php
PHPUnit 8.5.4 by Sebastian Bergmann and contributors.
.                                                                   1 / 1 (100%)
Time: 1.85 seconds, Memory: 18.00 MB
OK (1 test, 1 assertion)
おまけ

テスト実行時にvendor/bin/phpunitと毎回入力するのは煩わしいかと思うので、その際は下記のように、コマンドをエイリアスを設定してあげるといいかと思います。こうすることで、puとコマンドを叩いてあげることで、画面がリフレッシュされた後でテストを実行することができます。

$ alias="clear && vendor/bin/phpunit"
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?