it-swarm-ja.com

単体テストはどの程度正確にテーマに対して機能しますか?

単体テストに関する資料の大部分はテーマ開発ではなくプラグイン開発に焦点を合わせているので、自分で試してみるとつまずきます。私はPHPUnitをインストールし、WPリポジトリからテストスイートを取得し、テストが実行されるように設定しました。 どのテーマをどのテーマでテストするのかを指定しますか?テストプロセスの一環として、実際にはどのようにテーマを決めましたか。 WordPressを別にインストールしますが、どの時点で特定のテーマを使用するように指示しますか。明らかなものが足りないのですか。

1
Dre

TL; DR:ほとんどのテーマで必要となる唯一の "単体テスト"テストは これら です。


ほとんどの資料がプラグイン単体テストに関するものであることには、実際には非常に良い理由があります。テーマは、単体テストには向いていません。テーマは通常あなたのサイトがどのように表示されるかに主に関係します、そしてそれはあなたが本当に単体テストすることができない何かです。はい、あなたはcanあなたのテーマによって生成されたHTMLマークアップをチェックしますが、テストはあなたのテーマがどのように表示されるかseeすることはできません。あなたのテーマが望み通りにコンテンツを表示することを確認することはあなたが手動で、あなた自身でする必要があるものです。

もちろん、 @ toscho で言及されている テーマの "unit"テスト はこれを行う際にあなたにとって非常に有用である。しかし彼が指摘したように、それらは単体テストではありません。それらは単にあなたのテーマがしばしば予期しない問題を引き起こす可能性がある異なるコンテンツにどのように反応するかを見ることを可能にするいくつかの事前に書かれたコンテンツを提供するだけです。


上記のテストはすべてのテーマに適しており、ほとんどのテーマで十分です。ただし、それでも単体テストがテーマに適している場合があります。これらは、テーマが単にコンテンツを表示する以外にも他の機能を提供する場合です。つまり、あなたのテーマがいくつかのプラグインのような属性を持っている場合です。

さて、 テーマはたいていの場合、おそらくプラグインのような機能 を提供するべきではないことに注意してください。それが必要とされる時があるかもしれませんが、あなたが何をしているのか、そしてこの種の機能をテーマに詰め込む時になぜそれをしているのかを知るべきです。

テーマは単にコンテンツを表示する以上のことを行うテーマであり、この機能がプラグインではなくテーマに含まれることが必要であることを確信していると仮定して、あなたはいくつかを作成したいのです。単体テスト。その場合は、基本的にはテーマだけで、プラグインの単体テストと同じことをします。

あなたの研究で気づいたかもしれないように、プラグインユニットテストをするためのいくつかの異なるアプローチがあります。単体テストをできるだけ純粋にしたいという人もいるので、実際にはWordPressをまったく使用しません。 (たとえば、 WP Mock を参照してください。)現在、統合テストに近いアプローチ を好みます 、WordPressのテストスイートはテストの開始フレームワークとして使用されています。それはあなたがセットアップしようとしているもののように聞こえます、そしてそれは私が最もよく知っているものでもあるので、それは私たちが焦点を合わせるものです。

上でリンクされた私のチュートリアルのようにテストを設定しようとしているのなら、プラグイン専用の部分を少し調整する必要があるでしょう。私があなたがする必要がある主な変更はこの部分であると思います:

/**
 * The path to the main file of the plugin to test.
 */
define( 'TEST_PLUGIN_FILE', '/Users/me/svn/myplguin/myplugin.php' );

/**
 * Manually load the plugin main file.
 *
 * The plugin won't be activated within the test WP environment,
 * that's why we need to load it manually.
 *
 * You will also need to perform any installation necessary after
 * loading your plugin, since it won't be installed.
 */
function _manually_load_plugin() {

    require TEST_PLUGIN_FILE;

    // Make sure plugin is installed here ...
}
tests_add_filter( 'muplugins_loaded', '_manually_load_plugin' );

あなたはプラグインの代わりにあなたのテーマのfunctions.phpをロードする必要があるでしょう、そしてあなたの関数をフックするためにmuplugins_loadedより後に起動する別のフックを選択したいかもしれません。 (私はテーマの専門家ではないので、WordPressがすべてのテーマ依存関係をロードしたときに私が頭から離れていることを知りません。)

それはあなたに出発点を与えるはずです、あなたが同様に他の何かを微調整する必要があるかもしれませんが。

3
J.D.