テスト環境再構築だけで相当な時間ロス。
PhpStorm の Codeception が動かない
↓
独自でセットアップ
↓
WordPress テストツールの PHPUnit のバージョンが 7.x までで Codeception 4.x と非互換
↓
Codeception を PHPUnit 7.x を使用するようにカスタマイズ (phar が使えない -> Composer でセットアップ)
↓
カスタム Codeception をパッケージ化
Postscripts
Codeception 4.0.2 を Composer でセットアップすると、 “Module * is not installed.” のエラーでビルトインのモジュールがインストールされてない。-> 手動で一つ一つ composer.json に追加。
12345"require-dev": {"codeception/module-filesystem": "^1.0","codeception/module-asserts": "^1.1","codeception/module-db": "^1.0"}PHPUnit のバージョンを v7.x に落とし、テストを走らせると、
Serialization of 'Closure' is not allowed
というエラーを吐く。12345678<?xml version="1.0" encoding="UTF-8" ?><phpunit bootstrap="application/tests/bootstrap.php" backupGlobals="false"><testsuites><testsuite name="TestSuite"><directory>application/tests</directory></testsuite></testsuites></phpunit>phpunit.xmlでグローバル変数のバックアップを無効にして回避できるらしいが、Codeception では設定できない。
PHPUnitFrameworkTestCase
クラスを継承してprotected
$backupGlobals
プロパティにfalse
を与えることで問題は回避できる、1protected $backupGlobals = false;参考:#39327 (Database connection errors in unit tests on 4.7) – WordPress Trac
下位バージョンとの互換性を
class_alias()
などを駆使して保ちつつ、なんとかテストを正常に走らせるところまではこぎつけた。ただ、WordPress Tests Lib、Codeception, PHPUnit の変更によって、動作が変化するので、目を見張らせないといけない。ま、でも WordPress Tests Lib が PHPUnit 8 に対応してくれさえすれば、問題ないのだけれど。
いやはや、まいる。