LoginSignup
4
3

More than 3 years have passed since last update.

PHPUnitテスト実行時に「no such table」エラー

Last updated at Posted at 2020-09-24

結論

PHPUnitテスト実行時に「no such table」エラーが出たら、
テスト接続先DBがインメモリになっていないか設定を確認しよう🍄

事例

LaravelプロジェクトでPHPUnitテストを実行したら、
以下のエラーが出た。

root@efed49901495:/var/www# vendor/bin/phpunit tests/Unit/HogeServiceTest.php 
PHPUnit 8.5.0 by Sebastian Bergmann and contributors.

E                                                                   1 / 1 (100%)

Time: 868 ms, Memory: 20.00 MB

There was 1 error:

1) Tests\Unit\ReportServiceTest::countHoge_正常
Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1 no such table: hoges (SQL: select count(*) as aggregate from "hoges")

原因

テスト接続先DBの設定が、SQLiteのインメモリ機能を使用するようになっていた。

phpunit.xml
    <php>
        (省略)
        <server name="DB_CONNECTION" value="sqlite"/>
        <server name="DB_DATABASE" value=":memory:"/>
    </php>

Q. テスト接続先DBの設定は.env管理じゃないの?

A. じゃない……です🍄

Laravelでは環境変数を.envで設定します。
ですが、テスト時の環境変数はphpunit.xml内で指定された値が利用されます。

解決方法

テスト接続先DBの設定を、指定したいDBに合わせて修正。

phpunit.xml
    <php>
        (省略)
        <server name="DB_CONNECTION" value="mysql"/>
        <server name="DB_DATABASE" value="testdb"/>
    </php>
4
3
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
3