gpt4 book ai didi

laravel - laravel dusk 的代码覆盖率

转载 作者:行者123 更新时间:2023-12-04 02:18:27 25 4
gpt4 key购买 nike

有没有办法在运行 Laravel Dusk 时获得代码覆盖率?

我知道它运行浏览器测试,所以它不会检查代码,但是有没有办法添加一个监听器来检查覆盖了哪些代码?我现在没有看到关于这个主题的任何内容。

最佳答案

从概念上讲,您需要使用 PHP Unit 的代码覆盖率工具引导所有请求。

您可以直接使用 phpunit 库或通过 xdebug's coverage tools 执行此操作(使用 phpunit)。

来自 this sample根据我发现的要点,您可以根据通过 Dusk 测试传递的几个 _GET 参数启动覆盖工具。

public function testBasicExample()
{
$this->browse(function (Browser $browser) {
$browser->visit(route('test', [
'test_name' => 'testBasicExample',
'coverage_dir' => '/app/Http'
]))->assertSee('test');
});
}

完成工作的代码分为两部分
1.根据参数开始采集:
$test_name = $_GET['test_name'];
require __DIR__ . '/../vendor/autoload.php';
$current_dir = __DIR__;
$coverage = new SebastianBergmann\CodeCoverage\CodeCoverage;
$filter = $coverage->filter();
$filter->addDirectoryToWhitelist(
$current_dir . '/..' . ((isset($_GET['coverage_dir']) && $_GET['coverage_dir'])
? $_GET['coverage_dir']
: '/app')
);
$coverage->start($test_name);

以及2端采集输出:
function end_coverage()
{
global $test_name;
global $coverage;
global $filter;
global $current_dir;
$coverageName = $current_dir . '/coverages/coverage-' . $test_name . '-' . microtime(true);
try {
$coverage->stop();
$writer = new \SebastianBergmann\CodeCoverage\Report\Html\Facade;
$writer->process($coverage, $current_dir . '/../public/report/' . $test_name);
$writer = new SebastianBergmann\CodeCoverage\Report\PHP();
} catch (Exception $ex) {
file_put_contents($coverageName . '.ex', $ex);
}
}

使用一个聪明的小技巧调用结束集合,其中类 coverage_dumper只有一个析构函数,它会在 php 结束进程时自动调用。

就输出路径和变量而言,代码本身可以稍微整理一下,但从概念上讲,它应该可以工作。

关于laravel - laravel dusk 的代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43653881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com