다음은 코드 복제를 확인하는 데 사용되는 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>
이 파일에는 다른 코드 테스트를 위해 실행할 파일을 정의하는 위의 코드가 있습니다.
좁히려면 testsuite / Magento / Test / Php / LiveCodeTest.phpPHP Coding Standard Verification
testsuite
파일이 실행됩니다.
이 파일을 열면 다양한 유형의 코드 문제를 확인하는 다양한 기능을 찾을 수 있습니다. 실행될 기능은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 / tests / static / testsuite / Magento / Test / Php / _files / phpcpd / blacklist 위치에 . 파일을 읽고 복사 붙여 넣기 코드 감지 프로세스에서 제외 할 모든 폴더를 무시합니다.
모든 블랙리스트 파일 / 폴더를 코드에 추가하면 코드 아래에서 실행됩니다.
$result = $copyPasteDetector->run([BP]);
이 코드는 dev / tests / static / framework / Magento / TestFramework / CodingStandard / Tool / CopyPasteDetector.php 파일의 run
기능을 실행 합니다.
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
명령 합니다.
여기 명령 자체에서 Magento는
Test
코드로 모든 파일을 제외
--names-exclude "*Test.php"
또한 코드별로 13 줄 미만의 모든 코드 중복을 건너 뛰었습니다.
--min-lines 13
이 명령 실행의 출력은 testCopyPaste
기능에 정의 된 파일에 추가됩니다 . 복사 붙여 넣기 감지의 파일 이름 은 dev / tests / static / report 위치 에있는 phpcpd_report.xml 입니다 .
명령을 성공적으로 실행하면 출력이 보고서 파일에 추가됩니다.