WordPressのユニットテストでgo_to()とthe_content()を連続で使うと結果がおかしくなるときの対処法
※本ページはプロモーションが含まれていますWordPressのユニットテストで、go_to()を使いpostやpageに移動し、the_content()で出力を確認しているのですが、2回目のgo_to()、the_content()の組み合わせを行うと想定外の結果になり、困っていました。
結論としては、go_to()ではページ移動によるリセットが不十分なようで、add_filterがリセットされず、2回目のthe_contentを実行時、add_filterが2回動作しているのが原因でした。
add_filterを使ったプラグインを作っているのですが、無名関数を使ってadd_filterに追加しているので、2回目実行時に新たなフィルターとして追加され、フィルターが2度がけされるため2回目以降のthe_content()が期待通りの結果になっていませんでした。
対策としては、処理の前に「remove_all_filters」を使って「the_content」フィルターに追加されているフィルターを全て削除します。「wpautop」も削除されてしまうので必要なら追加。
remove_all_filters( 'the_content' ); add_filter( 'the_content', 'wpautop');
「wpautop」を「the_content」フィルターから削除すると、検証値の最後に「PHP_EOL」で改行コードを追加する必要がなくなるので、そのへんの影響を受けないコードなら最初から削除しておいても良いかも。
go_to()でページ移動するので、通常の遷移のようにいろいろリセットしてくれていると思っていたためハマりました。