Ось деякий опис команди 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 .
Після успішного виконання команди, вихідний файл буде доданий до файлів звітів.