WordPressではGutenberg用にすでにe2eテストが採用されている。e2eとは、End to Endの略で、要するに実際にブラウザを立ち上げて、ログインできるか確認するというテストだ。利用されるツールは次のようなものがある。
- Puppeteer: Chromeのヘッドレスモードを利用してブラウザを操作するツール
- Jest: JavaScript用のテストツール
- Jest Puppeteer: JestからPuppeteerを利用できるようにするツール
具体的なテストコードを紹介すると、次のようになる。
const { createURL } = require('@wordpress/e2e-test-utils')
describe('WordPress サイトのトップページをテストする', () => {
// トップページに移動する
beforeAll(async () => {
const frontpageURL = createURL('/')
await page.goto(frontpageURL)
})
// 検索が成功するかテスト
test('検索ができる', async () => {
await expect(page).toFillForm('form.search-form', { s: 'my-word' })
await page.evaluate(() =>
document.querySelector('form.search-form').submit()
)
await page.waitForNavigation({ waitUntil: 'domcontentloaded' })
expect(page.url()).toContain('?s=my-word')
})
});
これにより、実際にブラウザを利用するユーザーと同じ操作を反復的にテストすることで、変更への安定性を担保することができる。
このテストを特定の環境(e.g. staging.example.com
)に向けて行うことは可能だが、普通はTravis や Circle CI などのテストサービスを利用して継続的インテグレーションを行うことが重要である。バックエンドで実行するためにはDockerなどのコンテナツールを使い、ローカルにテスト用のWordPressを立ち上げて、そのWordPressに対してテストを行う。WordPressコアもそうやって開発されている。
で、このDockerなのだが、そもそもWordPress開発のために使われているものなので、WordPress Trunkに含まれているテスト部分を切り出し、誰でも使えるようにできないか、との提案が出ている。
これがもし成功すれば、WordPressのローカル開発環境としてコアチームが正式にサポートするものができあがる。テーマやプラグインなどはそれぞれの作者がそれぞれにテスト環境を用意しており、そのほとんどで継続的インテグレーションが採用されていないはずだ。もしコアチームが正式にサポートするようになれば、開発環境の安定性が増し、テーマやプラグインなどの品質も向上するかもしれない。
現在、これらのローカル開発環境はTestPressとしてGitHub上で開発されている。興味がある方はのぞいてみてほしい。
開発環境の今後
開発環境の変遷は長く、MampやXamppといったツールが広く使われる一方で、VCCWやVVVのようなVagrantベースのツールが黒い画面耐性を持つ人々に支持されてきた。DockerベースではWockerなどもあったが、最近ではDockerベースでGUI付きのLocal by Flywheelが登場し、覇権争いで一歩抜きん出た印象である。
Localは現在オープンソース化を検討中で、多言語化(日本語対応!)やプラグインが実装しやすくなる。そうすると、レンタルサーバー各社は独自のプラグインをリリースし、自社サーバーと完璧に融合したLocalを提供することが可能になる。
WordPressコアチーム謹製のTestPressと、最近ビジネス的にブイブイ言わせているWP Engineの傘下に入ったLocal by Flywheel、どちらが覇権をとるのか、筆者は楽しみにしている。
価格¥3,960
順位167,557位
著Adrian Mouat
翻訳Sky株式会社 玉川 竜司
発行オライリージャパン
発売日2016年8月17日
Dockerを学ぼうとすると、Kubernetesもセットで付いてくることが多いのだが、インフラエンジニア以外がそちらに手を出すと寿命が尽きるのでやめておこう。