Dưới đây là một số mô tả cho lệnh Magento 2 được sử dụng để kiểm tra sao chép mã.
Lệnh kiểm tra sao chép mã / sao chép-dán bên dưới.
php bin/magento dev:tests:run static
Lệnh này trước tiên sẽ đi đến dev/tests/static
thư mục. Tại đây bạn có thể xem tệp khai báo phpunit.xml.dist cho bộ kiểm tra này.
<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>
Trong tệp này, bạn sẽ tìm thấy mã ở trên sẽ xác định tệp nào sẽ thực thi cho các thử nghiệm mã khác nhau.
Để thu hẹp bạn có thể thấy PHP Coding Standard Verification
testsuite
Điều này sẽ thực thi tệp testsuite / Magento / Test / Php / LiveCodeTest.php
Khi bạn mở tệp này, bạn sẽ tìm thấy các chức năng khác nhau để kiểm tra các loại vấn đề mã khác nhau. Hàm sẽ được thực thi là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
);
}
Tại đây, bạn sẽ tìm thấy một mã sẽ được sử dụng để đưa vào danh sách đen bất kỳ tệp / thư mục nào từ kiểm tra mã này.
foreach (glob(__DIR__ . '/_files/phpcpd/blacklist/*.txt') as $list) {
$blackList = array_merge($blackList, file($list, FILE_IGNORE_NEW_LINES));
}
Đây foreach
chức năng sẽ kiểm tra xem có bất kỳ .txt
tập tin được thêm vào trong dev / kiểm tra / static / TestSuite / Magento / Kiểm tra / Php / _FILES / phpcpd / danh sách đen địa điểm. Nó sẽ đọc tệp và sẽ bỏ qua tất cả các thư mục để loại trừ khỏi quá trình phát hiện mã dán sao chép.
Sau khi thêm tất cả các tệp / thư mục danh sách đen vào mã, nó sẽ chạy bên dưới mã.
$result = $copyPasteDetector->run([BP]);
Mã này sẽ thực thi run
chức năng của tệp dev / tests / static / framework / Magento / TestFramework / CodingSt Chuẩn / 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;
}
Ở đây, mã thêm tất cả các blacklisted
thư mục / tệp trong--exclude
danh sách.
Sau đó nó sẽ chạy vendor/bin/phpcpd
lệnh.
Đây là lệnh Magento có
loại trừ tất cả
Test
các tệp bằng mã
--names-exclude "*Test.php"
Nó cũng đã bỏ qua tất cả các bản sao mã ít hơn 13 dòng theo mã
--min-lines 13
Đầu ra cho việc thực thi lệnh này sẽ được thêm vào tệp được xác định trong testCopyPaste
hàm. Tên tệp để phát hiện sao chép-dán là phpcpd numport.xml nằm ở vị trí dev / tests / static / báo cáo .
Sau khi thực hiện thành công lệnh, đầu ra sẽ được thêm vào các tệp báo cáo.