【问题标题】:Code coverage for laravel dusklaravel 黄昏的代码覆盖率
【发布时间】:2017-09-25 00:26:41
【问题描述】:

在运行 Laravel Dusk 时有什么方法可以获取代码覆盖率?

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

【问题讨论】:

  • 想知道完全相同的事情
  • 浏览器看不到正在执行的代码。
  • 我很想知道测试了哪些路线?而不是传统的“代码覆盖率”

标签: laravel phpunit code-coverage laravel-5.4 laravel-dusk


【解决方案1】:

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

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

从我发现的this sample gist 中,您可以根据通过 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 结束进程时会自动调用它。

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

【讨论】:

    【解决方案2】:

    Dusk 正在使用浏览器运行测试,而浏览器看不到正在执行的 PHP 代码。 我看到使用 Dusk 实现代码覆盖的唯一方法是在 php artisan serve 中创建一个选项,可以计算和创建覆盖文件。

    【讨论】:

      猜你喜欢
      • 2015-04-18
      • 2018-02-23
      • 2023-04-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多