Como configurar e executar alguns tipos de testes para Magento 2

Lucas Teixeira dos Santos Santana - Nov 14 '22 - - Dev Community

PHP Code Sniffer (PHPCS)

O PHP Code Sniffer (em uma tradução livre, pode ser algo como: Analisador de Código) é uma ferramenta para detectar violações nos padrões de código. Os padrões de código são formados por uma coleção de regras definidas pelos desenvolvedores, o padrão inicial do PHPCS é o PEAR. O PHPCS pode apontar para as recomendações padrões do PHP (PSRs). É necessário ter o PHPCS e o Magento Coding Standard como dependência de desenvolvimento no arquivo composer.json.

{
    ...
    "require-dev": {
        ...
        "squizlabs/php_codesniffer": "{version}",
        "magento/magento-coding-standard": "{version}",
        ...
    },
    ...
}
Enter fullscreen mode Exit fullscreen mode

Para configurar a primeira vez o Magento Coding Standard no PHPCS deve ser executado o seguinte comando:

vendor/bin/phpcs --config-set installed_paths ../../magento/magento-coding-standard/
Enter fullscreen mode Exit fullscreen mode

Para executar os testes deve-se chamar o comando phpcs que estará dentro de ./vendor/bin e referenciar a pasta de destino.

./vendor/bin/phpcs app/code/{Vendor}/{Module}
./vendor/bin/phpcs vendor/{vendor}/module-{module-name}
Enter fullscreen mode Exit fullscreen mode

ruleset.xml

Caso seja necessário personalizar a execução de testes é possível criar um arquivo ruleset.xml (a recomendação é chamá-lo de phpcs-ruleset.xml para não entrar em conflito com os outros arquivos ruleset.xml) no próprio módulo e configurar para que os testes sejam executados de acordo com a configuração deste arquivo.

A documentação necessária explicando tudo sobre o arquivo ruleset.xml está no link PHP_CodeSniffer Ruleset.

./vendor/bin/phpcs app/code/{Vendor}/{Module}
./vendor/bin/phpcs vendor/{vendor}/{module}
Enter fullscreen mode Exit fullscreen mode

PHP Mess Detector (PHPMD)

O PHP Mess Detector (em uma tradução livre, pode ser algo como: Detector de Desordem) é uma ferramenta que analisa o código de uma aplicação em PHP e detecta problemas potenciais e a qualidade. Algumas das inúmeras análises possíveis de serem executadas com o PHP Mess Detector são:

  • Localização de possíveis erros;
  • Localização de métodos, atributos e argumentos não utilizados;
  • Violação de convenções de nomenclatura;
  • Problemas potenciais relacionados ao tamanho do código;
  • Verifica a complexidade do código.

É necessário ter o PHPMD como dependência de desenvolvimento no arquivo composer.json.

{
    ...
    "require-dev": {
        ...
        "phpmd/phpmd": "{version}",
        ...
    },
    ...
}
Enter fullscreen mode Exit fullscreen mode

Para executar os testes com o PHPMD, deve-se chamar o comando phpmd que estará dentro de ./vendor/bin, referenciar o arquivo ruleset.xml (a recomendação é chamá-lo de phpmd-ruleset.xml para não entrar em conflito com os outros arquivos ruleset.xml) e a pasta de destino.

./vendor/bin/phpmd app/code/{Vendor}/{Module} text app/code/{Vendor}/{Module}/phpmd-ruleset.xml
./vendor/bin/phpmd vendor/{vendor}/{module} text vendor/{vendor}/{module}/phpmd-ruleset.xml
Enter fullscreen mode Exit fullscreen mode

O PHP Mess Detector possui alguns parâmetros que permitem adicionar filtros ao processo de análise e definir o formato de saída do resultado do teste.

ruleset.xml

Caso seja necessário personalizar a execução de testes é possível criar um arquivo ruleset.xml (a recomendação é chamá-lo de phpmd-ruleset.xml para não entrar em conflito com os outros arquivos ruleset.xml) no próprio módulo e configurar para que os testes sejam executados de acordo com a configuração deste arquivo.

A documentação necessária explicando tudo sobre o arquivo ruleset.xml está no link PHPMD doc.


PHP Copy/Paste Detector (PHPCPD)

O PHP Copy/Paste Detector (em uma tradução livre, pode ser algo como: Detector de Copia e Cola) é uma ferramenta para checagem de código duplicado nos arquivos em PHP do módulo. É necessário ter o PHPCPD como dependência de desenvolvimento no arquivo composer.json.

{
    ...
    "require-dev": {
        ...
        "sebastian/phpcpd": "{version}",
        ...
    },
    ...
}
Enter fullscreen mode Exit fullscreen mode

Para executar os testes com o PHPCPD, deve-se chamar o comando phpcpd que estará dentro do diretório ./vendor/bin.

./vendor/bin/phpcpd ./app/code/{Vendor}/{Module} --exclude=./vendor/e3/$1/Test/ --fuzzy --progress --min-lines=0
./vendor/bin/phpcpd ./vendor/{vendor}/{module} --exclude=./vendor/e3/$1/Test/ --fuzzy --progress --min-lines=0
Enter fullscreen mode Exit fullscreen mode

A documentação necessária explicando tudo sobre as opções para a execução do PHPCPD está no link PHPCPD Manual.


PHP Static Analysis (PHPStan)

O PHP Static Analysis (em uma tradução livre, pode ser algo como: Análise Estática) é uma ferramenta focada em encontrar erros no código sem executá-las de fato e sem que sejam feitos testes para as classes, a exatidão de cada linha do código pode ser verificada antes de executar a linha real, ou seja, a PHPStan tem a proposta de adaptar a funcionalidade de um compilador para análise estática do código. Algumas das verificações que o PHPStan realiza são:

  • Verifica a utilização das chamadas de classes, verificando se o código está realmente sendo utilizado;
  • Verifica a acessibilidade dos métodos e funções e a coesão entre os argumentos das chamadas com sua assinatura;
  • Verifica a tipagem do retorno dos métodos e funções;
  • Verifica a acessibilidade dos atributos e sua tipagem;
  • Verifica a existência de variáveis (respeitando o escopo e laços de repetição);
  • Verifica comparações estritas e tipagem de variáveis inúteis.

Para utilizar o PHPStan no Magento 2 é necessário uma extensão que permita a análise do código, é recomendável o módulo PHPStan Inviqa. Basta instalar esse módulo através do composer, é necessário ter o PHPStan como dependência de desenvolvimento no arquivo composer.json.

{
    ...
    "require-dev": {
        ...
        "phpstan/phpstan": "{version}",
        "inviqa/phpstan-magento2": "{version}",
        ...
    },
    ...
}
Enter fullscreen mode Exit fullscreen mode

Para executar os testes com o PHPStan, deve-se chamar o comando analyse que estará dentro de ./vendor/bin/phpstan, referenciar o caminho do arquivo phpstan.neon que será utilizado para configuração e a pasta de destino.

./vendor/bin/phpstan analyse ./app/code/{Vendor}/{Module} --configuration=phpstan.neon
./vendor/bin/phpstan analyse ./vendor/{vendor}/{module} --configuration=phpstan.neon
Enter fullscreen mode Exit fullscreen mode

phpstan.neon

O PHPStan utiliza o formato de configuração chamado neon, que é muito semelhante ao yml.

parameters:
    bootstrap: ../../../../vendor/inviqa/phpstan-magento2/phpstan-bootstrap.php
    level: 5
    paths:
        - ./
    fileExtensions:
        - php
    excludes_analyse:
        - ./etc/*
        - ./Test/*
        - ./test-reports/*
        - ./view/*
    ignoreErrors:
        - '#Call to an undefined method [a-zA-Z0-9\\_]+::(get|set|uns|has)[A-Z]#'
Enter fullscreen mode Exit fullscreen mode

Caso seja necessário a customização do arquivo phpstan.neon basta consultar a documentação abaixo:

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .