我为 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
所以我的问题是:
我如何说服 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
,codeception 应该会运行。作为奖励,phpunit
也应该仍然运行。
关于php - 使用 Codeception 运行现有的 Laravel 5.1 PHPUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34045873/