使用 Codeception 运行 现有 Laravel 5.1 PHPUnit 测试

Using Codeception to run existing Laravel 5.1 PHPUnit tests

我为 Laravel 5.1 应用程序编写了许多测试,目前我正在使用 PHPUnit 来 运行 这些测试。我正在尝试研究代码接收,因为我们有其他应用程序不是基于 Laravel 构建的,因此代码接收看起来是获得类似测试界面的最简单方法。

我们有一个相当大的团队,所以我更愿意使用一个一致的命令来测试所有项目,而不是一些使用 codecept 和一些使用 phpunit.

这是我作为 codeception.yml 尝试过的方法:

actor: Tester
paths:
   tests: tests
   log: storage/codeception/_output
   data: storage/codeception/_data
   support: storage/codeception/_support
   envs: storage/codeception/_envs

modules:
   enabled:
       - Laravel5:
           environment_file: .env

但是我得到了这样的回复:

$ codecept run
Codeception PHP Testing Framework v2.1.4
Powered by PHPUnit 4.8.18 by Sebastian Bergmann and contributors.

  [RuntimeException]           
  Suite '' could not be found

所以我的问题是:

如何说服 codeception 运行 我现有的 PHPUnit 测试尽可能少地修改?

经过很多时间,我发现这是可能的,但您必须对测试的布局方式进行一些修改。不过,好处是它不会阻止您 运行 PHPUnit 本身。

为了后代,这里是如何做到的:

  1. 将单元测试和 TestCase.php 移动到 tests 文件夹下名为 unit 的文件夹中。

它应该是这样的:

tests/
tests/unit/
tests/unit/MyUnitTest.php
tests/unit/TestCase.php
  1. tests/ 文件夹中添加 unit.suite.yml 文件。

内容应如下所示:

modules:
    enabled:
        - Laravel5:
            environment_file: .env.testing
  1. 更新您的 composer.json 以使用正确的测试类映射文件夹

在您的 autoload-dev 部分:

"classmap": [
    "tests/unit/TestCase.php"
]
  1. 更新您的 TestCase.php 以从正确的文件夹加载 bootstrap.php

这应该在TestCase.php

顶部的createApplication()方法中
public function createApplication()
{
    // $app = require __DIR__ . '/../bootstrap/app.php';
    $app = require __DIR__ . '/../../bootstrap/app.php';

    $app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();

    return $app;
}

最后,运行composer dump-autoload,代码应运行。作为奖励,phpunit 还应该 运行。