🚀

【Laravel】PHPUnitでの正規表現チェックはassertMatchesRegularExpression()を使おう

2021/01/29に公開

はじめに

LaravelとVue.jsでのSPA開発の勉強の一環でVue + Vue Router + Vuex + Laravelで写真共有アプリを作ろうを進めています。

あるテスト(PHPUnitを使用)でwarningを吐いたのでその時のことをまとめます。

環境

バージョン
Laravel 6.8
PHPUnit 9.5

PHPUnitのバージョン確認方法はいくつかありますが、この記事ではこの方法を紹介

$ composer show | grep phpunit
phpunit/php-code-coverage             9.2.5     Library that provides collection, processing, and rendering functionality for PHP code coverage information.
phpunit/php-file-iterator             3.0.5     FilterIterator implementation that filters files based on a list of suffixes.
phpunit/php-invoker                   3.1.1     Invoke callables with a timeout
phpunit/php-text-template             2.0.4     Simple template engine.
phpunit/php-timer                     5.0.3     Utility class for timing
phpunit/phpunit                       9.5.1     The PHP Unit Testing framework.

事象

先述のチュートリアルの中で写真投稿機能の実装でVue + Vue Router + Vuex + Laravelで写真共有アプリを作ろう (9) 写真投稿APIに着手していました。

チュートリアル通りにコードを書いてPHPunitを回すと下記の通りwarningが出ます。

assertRegExp() is deprecated and will be removed in PHPUnit 10. Refactor your code to use assertMatchesRegularExpression() instead

該当コードはこちら

tests/Feature/PhotoSubmitApiTest.php
    public function should_ファイルをアップロードできる()
    {
        // 略

        // ここでwarningが出ている
        $this->assertRegExp('/^[0-9a-zA-Z-_]{12}$/', $photo->id);

        // 略
    }

原因

assertRegExp() is deprecated and will be removed in PHPUnit 10. Refactor your code to use assertMatchesRegularExpression() insteadをそのまま読めばわかるのですが、

「assertRegExp()は非推奨&バージョン10で削除になる。だからassertRegExp()の代わりにassertMatchesRegularExpression()を使ってくれよ」

という警告内容です。

ハイ、というわけで調べます。(今更←)

assertRegExp() — PHPUnit latest Manual - Read the Docs

assertMatchesRegularExpression() — PHPUnit 9.5 Manual

PHPUnit9.5系ではもうassertRegExp()の記載はなくassertMatchesRegularExpression()になっていました。
(メソッドの説明は同じだったのでメソッド名が変わっただけのよう)

というわけで先ほどのコードのassertRegExp()の部分をassertMatchesRegularExpression()に変更して再度テストを回すと問題なくテストを実行することができました。

tests/Feature/PhotoSubmitApiTest.php
    public function should_ファイルをアップロードできる()
    {
        // 略

        // ここをassertMatchesRegularExpression()に修正
        $this->assertMatchesRegularExpression('/^[0-9a-zA-Z-_]{12}$/', $photo->id);

        // 略
    }

さいごに

ハンズオン系の教材のほとんどはバージョンアップによる更新がこまめに行われていないのでこういうケースはよくあると思いますが、都度調べていって対応すれば全然問題ないですね。
(逆に調べられないとキツい...)

この記事でご紹介したチュートリアルはクオリティ、ボリュームも素晴らしいのでこれが無料で見れるなんてめちゃくちゃありがたいですねm(__)m

著者に感謝m(__)m

Vue + Vue Router + Vuex + Laravelで写真共有アプリを作ろう

Discussion