WordPressとwordplate、wp-cliを使った一括画像変換処理コマンドを作るコーナー3回目。
今回は PHPUnit
を使って、バッチの単体テストを書きます。
composer で phpunit のインストール
まず、プロジェクトフォルダに入っておきます。
1 2 |
$ cd bulk-convert-images |
phpunit は開発環境でしか使わないので --dev
オプションをつけてインストールします。
1 2 |
$ composer require phpunit/phpunit --dev |
ファイル構成の確認
前回との違いは 以下のファイルの配置場所変更しました:
- bulk-convert-images/cli.php → bulk-convert-images/src/cli.php
またテストコードは testフォルダの下に配置することにしました。
- buik-convert-images/test
したがって 現在のファイル構成はこんな感じになっています:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
bulk-convert-images/ プロジェクトフォルダ ├── bulk-convert-images-cli/ │ ├── src/ │ │ └── cli.php │ └── test/ │ └── helper/ │ ├── images/ │ ├── gen-dummy-images.sh │ └── init.sh ├── composer.json ├── composer.lock ├── package.json ├── public/ ├── resources/ ├── vendor/ ├── webpack.mix.js └── wp-cli.yml |
テストコード
buik-convert-images/test/cli-test.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
<?php $approot = dirname(dirname(__DIR__)); define( 'VENDOR_PATH', $approot.'/vendor'); define( 'WP_CLI', true); require_once $approot . '/public/wp-config.php'; if ( ! defined( 'WP_CLI_ROOT' ) ) { define( 'WP_CLI_ROOT', VENDOR_PATH . '/wp-cli/wp-cli'); } require_once WP_CLI_ROOT . '/php/utils.php'; WP_CLI\Utils\load_dependencies(); WP_CLI::set_logger(new WP_CLI\Loggers\Quiet); require_once dirname(__DIR__).'/src/cli.php'; use PHPUnit\Framework\TestCase; class MessageTest extends TestCase { protected $ins; public function setUp() { $this->ins = new Bulk_Convert_Images(); } public function testValidFileTypes() { $this->assertEquals(Bulk_Convert_Images_Logic::VALID_FILE_TYPES, ['jpg', 'jpeg', 'gif', 'png']); } public function testAllowedMimeTypes() { $this->assertEquals(Bulk_Convert_Images_Logic::ALLOWED_MIMETYPES, [ 'jpg' => 'image/jpg', 'jpeg' => 'image/jpeg', 'png' => 'image/png', 'gif' => 'image/gif', ]); } /** * @dataProvider dataProviderGetExtension */ public function testGetExtension($actual, $expected) { $this->assertEquals(Bulk_Convert_Images_Logic::get_extension($actual), $expected); } public function dataProviderGetExtension() { return [ [ ['to' => 'jpg'], 'jpg'], [ ['to' => 'jpeg'], 'jpeg'], [ ['to' => 'png'], 'png'], [ ['to' => 'gif'], 'gif'], [ ['to' => 'webp'], false], [ ['to' => ''], false], [ ['to' => null], false], [ ['to' => 1], false], [ ['to' => false], false], ]; } public function testGetPosts() { $posts = Bulk_Convert_Images_Logic::get_posts(1); $this->assertEquals(empty($posts), false); } /** * @dataProvider dataProviderAllowedFile */ public function testAllowedFile($actualMimeType, $actualExt, $expected) { $this->assertEquals(Bulk_Convert_Images_Logic::allowed_file($actualMimeType, $actualExt), $expected); } public function dataProviderAllowedFile() { return [ [ 'image/jpg', 'jpg', true ], [ 'image/jpeg', 'jpeg', true ], [ 'image/jpg', 'jpeg', false ], [ 'image/png', 'png', true ], [ 'image/png', 'gif', false ], ]; } } |
前半部分のごちゃっとしたところは、(1)WordPress本体の読み込みと、(2)WP-CLI関連の読み込み、(3)src/cli.phpの読み込みです。
テスト実行
1 2 |
$ vendor/bin/phpunit bulk-convert-images-cli/test/cli-test.php |
実行結果
1 2 3 4 5 6 |
........... 11 / 11 (100%) Time: 148 ms, Memory: 22.00 MB OK (11 tests, 11 assertions) |
ハマったところは、自作コマンドクラスをテストコード側でインスタンス化したいのだけど、WP-CLI関連クラスが必要で、
それを読みこむ順番を調べるため コードを読んだりするのに時間がかかりました。
次回は、最終回 作ったコマンドをgithubにアップして、
プロダクション環境にデプロイし実行します。
No comment yet, add your voice below!