フロントエンド開発者向けのPHP静的テスト


7

私はFrontoolsでPHP静的テストを追加してテストプロセスを簡素化および改善しようとしています。パフォーマンスを向上させることができる場合、b / c結果を得るのに非常に時間がかかります。

GHの問題-https://github.com/SnowdogApps/magento2-frontools/issues/45

私はPHPのテストライブラリやツールに慣れていないので、いくつか質問があります。

  1. M2が2014年のテストライブラリ(PHPUnitとPHP_CS)を新しいものではなく使用する理由はありますか?
  2. このテストの出力が混乱しているように見え、何がどこでどこで問題が発生したのかを理解することが難しいのは正常ですか?CSS / JSのコード品質テストの出力と比較すると、それは悪夢です。PHPのバックトレースのように見える代わりに、より良いレポーターや、意味のあるレポートを取得する他の方法はありますか?
  3. それがとても遅い理由は何ですか?テンプレートファイルの分析には、7〜8分かかります。最悪の場合のフロントエンドテストのほとんどは数秒かかるため、問題に関するライブフィードバックを得る方法はありません。
  4. Magento 2インスタンス全体(CIテスト)ではなく、単一のモジュール(つまりテーマ)がある場合に、このタイプのテストを実行するにはどうすればよいですか?
  5. PHP_CSにはすでにGulpの単純なラッパーがあるようですが、設定がどこに保存されているのかわかりません。/.php_csファイルにありますか?

回答:


2

私はそれについて私の考えをあなたに与えるつもりです、私はいくつかの点で間違っているかもしれませんが、それはいくつかのことを明確にするでしょう:

M2が2014年のテストライブラリ(PHPUnitとPHP_CS)を新しいものではなく使用する理由はありますか?

私の推測では、Magento 2の開発は数年前に開始されたので、チームはその時点で利用可能なライブラリを使用していました。Magento 2で多くのテストを作成したので、テストを壊さないために、最初のテストを作成したときに使用したバージョンを使用している可能性があります。彼らがメジャーバージョンのある時点でそれをアップグレードできると確信しています。これについてフォーラムで機能リクエストを行うことができますhttps : //community.magento.com/t5/Magento-2-Feature-Requests-and/idb-p/feature-requests

このテストの出力が混乱しているように見えて、どこでどこがおかしいのかを理解するのが難しいのは正常ですか?CSS / JSのコード品質テストの出力と比較すると、それは悪夢です。PHPバックトレースのように見える代わりに、より優れたレポーターまたは他の方法で意味のあるレポートを取得できますか?

ええ、そうです。デフォルトのPHPUnit出力は、それほど素晴らしいものではありません。ほとんどのIDEはPHPUnitをサポートしており、より良いより良い出力。例えば、ここでPHPStormでテストを実行するための公式ドキュメントです:http://devdocs.magento.com/guides/v2.0/test/unit/unit_test_execution_phpstorm.html ユニットテストのためのGUIを提供しVisualPHPUnitのようなツールもありますhttps://github.com/VisualPHPUnit/VisualPHPUnit

それがとても遅い理由は何ですか?テンプレートファイルの分析には、7〜8分かかります。最悪の場合のフロントエンドテストのほとんどは数秒かかるため、問題に関するライブフィードバックを得る方法はありません。

まず、Magento 2には多くのテストが付属しており、これは明らかにパフォーマンスに影響を与えます(ただし、コードカバーを正しくするために必要なのはそれだけです;))。Vinai Koppがテストをより速く実行するために実行できるいくつかのパフォーマンスの改善に言及したと私は確信しています。

Magento 2インスタンス全体(CIテスト)ではなく、単一のモジュール(つまりテーマ)がある場合に、このタイプのテストを実行するにはどうすればよいですか?

1つのモジュールのテストを実行することを意味しますか?はい、あなたは間違いなくそれを行うことができます。KAndy(彼はMagento 2チームのメンバーです)からの回答確認することをお勧めします:Magento2の特定のモジュールのテストを実行します

PHP_CSにはすでにGulpの単純なラッパーがあるようですが、設定がどこに保存されているのかわかりません。/.php_csファイルにありますか?

その単純なラッパーがどこにあるのかわかりません。.php_csファイルではないと思います。私が知っていることから、このファイルはGitHubのプリコミット静的レビューにのみ使用されます


ご回答ありがとうございます!@fschmenglerの回答の下にあるほとんどのことについてコメントしますが、ポイント5のように見えます。私はGulpの実装に関連することについては質問していません。b/ c私はJSツールに精通しています:) PHP_CS構成がMagentoレベルでどのように保存されているかを知る必要があるだけです。
igloczek 2016

2

これらは一度にかなり多くの質問ですが、私は少なくともいくつかに答えることができます:

  1. M2が2014年のテストライブラリ(PHPUnitとPHP_CS)を新しいものではなく使用する理由はありますか?

Magento 2の主な開発は2014年頃に始まったため、当時利用可能なツールを使用していました。PHPUnit 5がリリースされたとき、新しいバージョンと互換性のない多数のテストがすでに存在していたため(例については、このフォーラムのスレッドを参照してください)、更新が延期されたことは理解できます。

ここには具体的な例はありませんが、古いPHP_CSバージョンを使用する理由は同じだと思います。

  1. このテストの出力が混乱しているように見えて、どこでどこがおかしいのかを理解するのが難しいのは正常ですか?CSS / JSのコード品質テストの出力と比較すると、それは悪夢です。PHPバックトレースのように見える代わりに、より優れたレポーターまたは他の方法で意味のあるレポートを取得できますか?

PHPStormのようなIDEはこれらのツールと適切に統合されており、ソースファイルでコードスニファの結果を直接確認したり、PHPUnitテストに関する優れたGUIを取得したりできます。

そのほか、PHPUnitにはさまざまな出力オプションがあります。たとえば、--testdox引数を指定すると、合格および不合格のテストの人間が読めるチェックリストが表示されます。情報は少なくなりますが、概要は読みやすくなっています。を使用してHTML形式で取得することもできます--testdox-html=OUTPUTFILE。同様に、HTMLのコードカバレッジレポートをで取得できます--coverage-html OUTPUTDIR

しかし、より有用な出力形式は、VisualPHPUnitやCIサーバーなどの他のアプリケーションで読み取ることができるXMLおよびJSON形式です。

レポート生成用のPHPUnitパラメータ:

Code Coverage Options:

  --coverage-clover <file>  Generate code coverage report in Clover XML format.
  --coverage-crap4j <file>  Generate code coverage report in Crap4J XML format.
  --coverage-html <dir>     Generate code coverage report in HTML format.
  --coverage-php <file>     Export PHP_CodeCoverage object to file.
  --coverage-text=<file>    Generate code coverage report in text format.
                            Default: Standard output.
  --coverage-xml <dir>      Generate code coverage report in PHPUnit XML format.

Logging Options:

  --log-junit <file>        Log test execution in JUnit XML format to file.
  --log-tap <file>          Log test execution in TAP format to file.
  --log-json <file>         Log test execution in JSON format.
  --testdox-html <file>     Write agile documentation in HTML format to file.
  --testdox-text <file>     Write agile documentation in Text format to file.

詳細:https : //phpunit.de/manual/current/en/textui.h​​tml

レポート生成用のPHP_CSパラメータ

PHP_CSには、さまざまなレポート形式もあります。

--report=xml         PHP_CS XML format
--report=checkstyle  Checkstyle XML format
--report=csv         CSV

(その他の形式:emacs、svnblame、gitblame)

詳細:https : //github.com/squizlabs/PHP_CodeSniffer/wiki/Reporting

  1. それがとても遅い理由は何ですか?テンプレートファイルの分析には、7〜8分かかります。最悪の場合のフロントエンドテストのほとんどは数秒かかるため、問題に関するライブフィードバックを得る方法はありません。

PHP_CSがテンプレートファイルだけで8分かかる理由はわかりませんが、ウォッチャーは変更されたファイルのみをチェックすることができるはずです。PHPStorm統合は、これを非常にうまく行います。

  1. Magento 2インスタンス全体(CIテスト)ではなく、単一のモジュール(つまりテーマ)がある場合に、このタイプのテストを実行するにはどうすればよいですか?

単に実行phpcs /path/to/themeして、このディレクトリ内のファイルのみをチェックします。

  1. PHP_CSにはすでにGulpの単純なラッパーがあるようですが、設定がどこに保存されているのかわかりません。/.php_csファイルにありますか?

このラッパーにはファイルウォッチャーが含まれているようには見えないため、メリットはわかりません。

.php_csチェックして、その使用にコーディング標準をするファイルのファイル定義。これはPHP_CS構成ファイルであり、gulpラッパーから独立しています。


ご回答ありがとうございます!1.このトピックを改善提案スレッドに移動します。b/ cは、何が停止しているか、つまり、PHPUnitを最新の4.xに更新することを本当に誰も知らないようです。2.私はAtomユーザーです。b/ cこのIDE機能はまったく必要ありません(フロントエンドではほとんど役に立ちません)ので、コンソールの改善のみを調べています(CIテストの出力も重要です)。 。私はこのパラメーターをテストしますが、単純なカスタムプリンターモジュールを構築するように見えますが、より良いオプションになります。3.見つかった原因のように見えます-静的テストでも整合性テストの一部が実行され、完了するまでに約4〜5分かかります。1/2
igloczek 2016

4. PHP_CSを実行するだけではありません。静的テストにはXXS脆弱性チェックとPHPUnitの上に構築されたカスタム関数も含まれているため、おそらく何かを実行するにはMagentoコアパッケージが必要です。<5.これはGulpプラグインなので、ファイルの監視はGulpレベルで処理されますが、場合。Magentoが格納されているこのプラグインの構成がどこにあるかを知る必要があります(存在する場合、構成ファイルのないリンターは想像できません:O)2/2
igloczek

3.-4。)確かに、依存関係などをチェックするのに時間がかかるPHPUnit静的テストスイートがあります。ファイルのリストをdev/tests/static/testsuite/Magento/Test/_files/changed_files*(で生成できます)に置くことができget_github_changes.php一部のテストはこれらのファイルのみを処理することがわかりました。しかし、残りについては、それらをモジュール/テーマごとに制限する可能性はありません。あなたができることは、単一のテストスイートを実行することです。例phpunit --testsuite "Less Static Code Analysis"phpunit.xml.dist.php_cs
:(

テストを抽出してcomposerパッケージを分離し、それをdev依存関係としてパッケージに追加して、CI環境でテストを個別に実行することを考えています。それが何らかの形で機能することを願っています:D
igloczek
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.