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

3

我有一些为 Laravel 5.1 应用程序编写的测试,目前正在使用 PHPUnit 运行测试。我尝试研究 Codeception ,因为我们有其他不基于 Laravel 的应用程序,所以 Codeception 看起来是获得类似测试接口最简单的方式。

由于我们有一个相当大的团队,因此我希望在所有项目中使用单个一致的命令进行测试,而不是一些使用 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

我的问题如下:

我该如何尽可能少地修改现有的PHPUnit测试来说服Codeception运行它们?

1个回答

3

我花费了很多时间才发现这是可能的,但你需要对测试的布局进行一些修改。好处是它并不会阻止你直接运行PHPUnit。

以下是如何操作:

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

它应该看起来像这样:

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命令,Codeception 就可以运行了。额外的好处是phpunit也可以继续运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接