laravel dusk

时间:2017-04-27 09:28:30

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

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

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

2 个答案:

答案 0 :(得分:5)

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

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

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

lm

起作用的代码分为两部分 1.根据以下参数开始收集:

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

2端采集输出:

$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);

使用聪明的小技巧来调用end集合,其中类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); } } 仅具有一个析构函数,该析构函数在php结束进程时自动被调用。

代码本身可以在输出路径和变量使用的地方进行一些整理,但是从概念上讲,它应该可以工作。

答案 1 :(得分:0)

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