質問: ### 前提・実現したいこと illuminate/database + PHPUnit でデータベースを使ったユニットテストを書こうとしています。 その際、PDOのエラーが発生しました。 ### 発生している問題・エラーメッセージ ``` PDOException: You cannot serialize or unserialize PDO instances ``` ### 該当のソースコード ``` use Illuminate\Database\Capsule\Manager as Capsule; ... ... public static function setUpBeforeClass() { Capsule::schema()->create('articles', function ($table) { $table->increments('id'); $table->string('title'); $table->string('detail'); $table->timestamps(); }); } ... ... ``` ↑のように `setUpBeforeClass` でテーブル作成処理を書くと、最初の何でもないテストでこけました。 ### 試したこと エラーコードでとりあえず調べると、以下の stack が近いかなぁと思いました。 Keep getting “You cannot serialize or unserialize PDO instances” in PHPUnit using PHPStorm そこで、phpunit.xml に `backupGlobals="false"` を追加することでテストは通るようになりました。 英語がちょっとよくわかんなくて ... 何なんだろうなぁという気持ちです。 ご助力お願いします! ### 補足情報(言語/FW/ツール等のバージョンなど) phpunit と php のバージョン ``` $ vendor/bin/phpunit --version PHPUnit 5.7.21 by Sebastian Bergmann and contributors. $ php -v PHP 5.6.22 (cli) (built: May 26 2016 15:44:55) ``` illuminate/database : ^4.0 Keep getting “You cannot serialize or unserialize PDO instances” in PHPUnit using PHPStorm ↑翻訳 > > 私はついにそれを理解した!何らかの理由でテスト環境変数を設定しても何の効果もありませんでした。 > > > phpunit.xml設定を作成し、テストパラメータを定義し、Phpstormでリファレンスを作成することによって、私は最終的にテストを実行することができました。 > > > 参考までに、これは私のphpunit.xmlの内容でした > > > これ以降も PHPStorm について語ってるので、関係ないっぽいんでしょうか ... ? phpunit.xml はたまたまだった可能性が ... ?
回答: なんだか良くわからないけど、英訳だけしときまー。 I finally figured it out! For whatever reason, setting the test environment variables in the test was having no effect. 私は結局見つけ出した! 理由が何であろうと、テスト内におけるテスト環境変数はいっさい影響を与えないという事を。 By creating a phpunit.xml configuration, defining the test parameters and creating a reference to it in Phpstorm I was finally able to run the test. phpunit.xmlに設定を作成する事でテストパラメターは定義され、PhpStorm内でのテストにおける参照は作成され、私は最終的にテストを走らせることが出来た。 あと、多分このへんぞな、もし @backupGlobals グローバル変数の保存や復元を、テストケースクラスのすべてのテストで完全に無効にすることができます。 このように使います。 @backupGlobals