WordPressのショートコードをWordPressを開かないでテストする。

Simple Mapというプラグインをアップデートしました。

https://ja.wordpress.org/plugins/simple-map/

何をアップデートしたかというと以下のようにデフォルトの地図の表示を選べるようにした感じです。

[map map_type_id="SATELLITE"]スカイツリー[/map]

このプラグインでやってるテスト

このプラグインでは、ショートコードの属性がきちんとパースされて期待通りのHTMLで出力されているかどうかをphpunitで確認して、さらにそのHTMLがGoogle Mapに変換されるかをQUinitでテストしています。

このプラグインには、10種類の属性があって、プルリクとかで増えた属性もあったりするので僕が使ったことがないものでさらに使う気がない属性もいくつかあります。

そしてそういう自分が使う気がない機能の確認作業に毎回手間をかけるつもりはまったくありません。

そんなわけで一見面倒くさそうですが、WP-CLIとかWordPress本体のテスト用フレームワークのおかげで、一度テストさえ書いてしまえばこれらのテストに伴って必要なコマンドは一つだけ。

$ npm test

たったこれだけで、概ね25通りの確認作業を行っています。

$ npm test

> simple-map@2.9.0 test /Users/miyauchi/www/wp.dev/www/wordpresswp-content/plugins/simple-map
> npm run build && phpunit && grunt test


> simple-map@2.9.0 build /Users/miyauchi/www/wp.dev/www/wordpresswp-content/plugins/simple-map
> ./node_modules/grunt-cli/bin/grunt

Running "uglify:all" (uglify) task
>> 1 file created.

Done, without errors.
WordPress database error Unknown system variable 'storage_engine' for query SET storage_engine = INNODB
<div id="error"><p class="wpdberror"><strong>WordPress database error:</strong> [Unknown system variable &#039;storage_engine&#039;]<br /><code>SET storage_engine = INNODB</code></p></div>Installing...
Running as single site... To run multisite, use -c tests/phpunit/multisite.xml
Not running ajax tests. To execute these, use --group ajax.
Not running ms-files tests. To execute these, use --group ms-files.
Not running external-http tests. To execute these, use --group external-http.
PHPUnit 5.2.12 by Sebastian Bergmann and contributors.

....                                                                4 / 4 (100%)

Time: 1.47 seconds, Memory: 24.00Mb

OK (4 tests, 13 assertions)
Running "uglify:all" (uglify) task
>> 1 file created.

Running "connect:server" (connect) task
Started connect web server on http://localhost:8080

Running "qunit:all" (qunit) task
Testing http://localhost:8080/tests/qunit/simple-map-test.html ............OK
>> 12 assertions passed (31ms)

Done, without errors.

ただし、これらのテストで確認できるのはGoogle Mapが表示されているかというとこまでで、プロパティによってどんな風に地図の表示が変わるかまでは確認していません。

さすがにそこまで頑張るほど価値があるものでもないですし。

そこで、PHPUnitの時にスタティックなHTMLを一つだけ出力して、それを普通に開いて目視でテストしています。

PHPUnitの時にスタティックなHTMLを吐くコードを抜粋すると以下のような感じ。

$template = str_replace( '__SHORTCODES__', '[map]Osaka, Japan[/map]', $template );
$test_content = do_shortcode( $template );
file_put_contents( $to_file, $test_content );
$this->assertTrue( is_file( $to_file ) );
  •  あらかじめHTMLのテンプレートを用意して、その中にビルドしたSimple MapのJavaScriptとQUnit用のJavaScriptを仕込んでおく。
  • テストしたいショートコード(11種類)をstr_replace()でテンプレートの中に放り込む。
  • WordPressのdo_shorcode()にテンプレートを丸ごと放り込んでHTMLに変換。
  • 変換したHTMLをファイルとして保存。
  • 最後にファイルの有無を確認。

つまり何が言いたいかというと、ある程度テストをちゃんと書くとローカルにWordPress環境が不要だったりするんですよね。

というわけで、今回のアップデートはWordPressを一切開くことなく完了してしまいました。

 

このリポジトリでは、他にもWordPress.orgへの自動デプロイとかもやってますので、もし興味がある人はじっくり遊んでみてください。

https://github.com/miya0001/simple-map

あと、Travis CIのログはこちら。

https://travis-ci.org/miya0001/simple-map