WordPressのテーマをTravis CIでテスト : WordPress

Pocket

WordPressの色々なプロジェクトをみているとテストでTravisを利用しているようです。
まずは自作のテーマをテストする環境を作成したいと思います。

前提

  • MySQLのrootユーザーのパスワードは設定していません。
  • WP-CLIは1.1.0です。
  • テーマ名はexample

ローカルでテスト環境構築

  1. WordPressをインストールしテーマ配置。
  2. WP-CLIをインストール。
  3. WP-CLIでテーマディレクトリへテスト関連アセットとコーディング規約チェックツール(PHP_CodeSniffer)の設定ファイル作成。
    $ wp scaffold theme-tests example

    • bin/install-wp-tests.sh
      /tmpフォルダへテスト環境構築スクリプト1
    • tests/bootstrap.php
    • tests/sample-test.php
    • phpunit.xml.dist
    • phpcs.ruleset.xml
      PHP_CodeSnifferコンフィグレーション
  4. テーマディレクトリへ移動し下記スクリプトを実行23
    $ curl -L https://raw.githubusercontent.com/miya0001/install-wp-test-env/master/install.sh | bash
    miya0001/install-wp-test-env
  5. テーマディレクトリでPHP_CodeSniffer、PHPUnit実行。
    $ wp scaffold theme-tests example
    $ phpcs --standard=phpcs.ruleset.xml $(find . -name '*.php')
    $ phpunit

ローカルへPHP_CodeSniffer/WordPress-Coding-StandardsをComposerでイントール

流れ

  1. PHP_CodeSnifferをComposerでインストール。
  2. WordPress-Coding-StandardsをComposerでインストール。
  3. WordPress-Coding-StandardsをPHP_Codesnifferのパスへ追加。

インストール

2017.05.04時点ではWordPress-Coding-Standardsは0.11.0でPHP_Codesnifferの2.8.1に対応していました。

$ composer require --dev squizlabs/php_codesniffer ^2.8.1
$ composer require --dev wp-coding-standards/wpcs
{
    "require-dev": {
        "squizlabs/php_codesniffer": "^2.8.1",
        "wp-coding-standards/wpcs": "^0.11.0"   
    }
}

WordPress-Coding-StandardsをPHP_CodeSnifferへ追加

https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards

$ phpcs --config-set installed_paths /path/to/wpcs

パスはComposerでインストールしたとき/path/to/project/vendor/wp-coding-standards/wpcsになります。

検証

$ cd (wp theme path --dir example)
$ phpcs --standard=phpcs.ruleset.xml $(find . -name '*.php')

Travis CI

テーマディレクトリ(例ではexample)の直下でgitリポジトリを作成します。  
GitHubとTravisの設定をしたあとでmasterへPushするとテストが実行されます。


  1. /tmp内のデータは再起動すると通常破棄されます。 

  2. bin/install-wp-tests.shはTravis CIでのようにテストの度に環境を破棄することが前提なので既存のデータベースがあるとテスト環境構築に失敗します。公開されているスクリプトはinstall-wp-tests.shを呼び出す前に既存のテスト用データベースがあれば破棄します。   

  3. MySQL5.6からWarning: Using a password on the command line interface can be insecure.が出るのでmysqladmin create $DB_NAME --user="$DB_USER"$EXTRAmysqladmin create $DB_NAME --user="$DB_USER"$EXTRAへ変更しました。 

人気記事 はてなブックマーク

この日記のはてなブックマーク数