使用 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 本身。
为了后代,这里是如何做到的:
- 将单元测试和
TestCase.php
移动到 tests
文件夹下名为 unit
的文件夹中。
它应该是这样的:
tests/
tests/unit/
tests/unit/MyUnitTest.php
tests/unit/TestCase.php
- 在
tests/
文件夹中添加 unit.suite.yml
文件。
内容应如下所示:
modules:
enabled:
- Laravel5:
environment_file: .env.testing
- 更新您的
composer.json
以使用正确的测试类映射文件夹
在您的 autoload-dev
部分:
"classmap": [
"tests/unit/TestCase.php"
]
- 更新您的
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
还应该 运行。
我为 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 本身。
为了后代,这里是如何做到的:
- 将单元测试和
TestCase.php
移动到tests
文件夹下名为unit
的文件夹中。
它应该是这样的:
tests/
tests/unit/
tests/unit/MyUnitTest.php
tests/unit/TestCase.php
- 在
tests/
文件夹中添加unit.suite.yml
文件。
内容应如下所示:
modules:
enabled:
- Laravel5:
environment_file: .env.testing
- 更新您的
composer.json
以使用正确的测试类映射文件夹
在您的 autoload-dev
部分:
"classmap": [
"tests/unit/TestCase.php"
]
- 更新您的
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
还应该 运行。