Ось деякий опис команди Magento 2, яка використовується для перевірки дублювання коду.
Команда перевірки дублювання коду / копіювання-вставлення наведена нижче.
php bin/magento dev:tests:run static
Ця команда спочатку перейде до dev/tests/staticпапки. Тут ви можете побачити файл декларації phpunit.xml.dist для цього тестового набору.
<testsuites>
<testsuite name="Less Static Code Analysis">
<file>testsuite/Magento/Test/Less/LiveCodeTest.php</file>
</testsuite>
<testsuite name="Javascript Static Code Analysis">
<file>testsuite/Magento/Test/Js/LiveCodeTest.php</file>
</testsuite>
<testsuite name="PHP Coding Standard Verification">
<file>testsuite/Magento/Test/Php/LiveCodeTest.php</file>
</testsuite>
<testsuite name="Code Integrity Tests">
<directory>testsuite/Magento/Test/Integrity</directory>
</testsuite>
<testsuite name="Xss Unsafe Output Test">
<file>testsuite/Magento/Test/Php/XssPhtmlTemplateTest.php</file>
</testsuite>
</testsuites>
У цьому файлі ви знайдете вище код, який визначатиме файл, який потрібно виконати для різних тестів коду.
Щоб звузитись, ви можете побачити PHP Coding Standard Verification testsuiteЦе виконає файл тестування файлів / Magento / Test / Php / LiveCodeTest.php
Коли ви відкриєте цей файл, ви знайдете різні функції, щоб перевірити наявність різних типів проблем з кодом. Функція, яка буде виконуватися, - цеtestCopyPaste
public function testCopyPaste()
{
$reportFile = self::$reportDir . '/phpcpd_report.xml';
$copyPasteDetector = new CopyPasteDetector($reportFile);
if (!$copyPasteDetector->canRun()) {
$this->markTestSkipped('PHP Copy/Paste Detector is not available.');
}
$blackList = [];
foreach (glob(__DIR__ . '/_files/phpcpd/blacklist/*.txt') as $list) {
$blackList = array_merge($blackList, file($list, FILE_IGNORE_NEW_LINES));
}
$copyPasteDetector->setBlackList($blackList);
$result = $copyPasteDetector->run([BP]);
$output = "";
if (file_exists($reportFile)) {
$output = file_get_contents($reportFile);
}
$this->assertTrue(
$result,
"PHP Copy/Paste Detector has found error(s):" . PHP_EOL . $output
);
}
Тут ви знайдете код, який буде використаний для чорного списку будь-яких файлів / папок із цієї перевірки коду.
foreach (glob(__DIR__ . '/_files/phpcpd/blacklist/*.txt') as $list) {
$blackList = array_merge($blackList, file($list, FILE_IGNORE_NEW_LINES));
}
Ця foreachфункція перевірить наявність .txtфайлів, доданих у програмі dev / testing / static / testinguite / Magento / Test / Php / _files / phpcpd / чорний список . Він прочитає файл і проігнорує всі папки, щоб виключити з процесу виявлення коду вставлення коду.
Після додавання до коду всіх файлів / папок чорного списку він буде працювати під кодом.
$result = $copyPasteDetector->run([BP]);
Цей код буде виконувати runфункцію файлу dev / testing / static / Framework / Magento / TestFramework / CodingStandard / Tool / CopyPasteDetector.php .
public function run(array $whiteList)
{
$blackListStr = ' ';
foreach ($this->blacklist as $file) {
$file = escapeshellarg(trim($file));
if (!$file) {
continue;
}
$blackListStr .= '--exclude ' . $file . ' ';
}
$vendorDir = require BP . '/app/etc/vendor_path.php';
$command = 'php ' . BP . '/' . $vendorDir . '/bin/phpcpd' . ' --log-pmd ' . escapeshellarg(
$this->reportFile
) . ' --names-exclude "*Test.php" --min-lines 13' . $blackListStr . ' ' . implode(' ', $whiteList);
exec($command, $output, $exitCode);
return !(bool)$exitCode;
}
Тут код додає всі blacklistedпапки / файли в--exclude списку.
Після цього він запуститься vendor/bin/phpcpd команду.
Тут у самій команді Маженто є
виключаються всі
Testфайли за кодом
--names-exclude "*Test.php"
Він також пропустив всі дублікати коду, коди яких менше 13 рядків
--min-lines 13
Вихід для виконання цієї команди буде доданий до файлу, визначеного у testCopyPasteфункції. Ім'я файлу для виявлення копіювання-вставки - phpcpd_report.xml, розташоване в розділі dev / testing / static / report .
Після успішного виконання команди, вихідний файл буде доданий до файлів звітів.