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

标签 php unit-testing laravel phpunit codeception

我为 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 本身。

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

  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,codeception 应该会运行。作为奖励,phpunit 也应该仍然运行。

关于php - 使用 Codeception 运行现有的 Laravel 5.1 PHPUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34045873/

相关文章:

php - 在 Laravel 5.2 中创建嵌套类别列表的面包屑

java - 使用 JUnit 和 Web MVC 进行集成测试

php - Laravel 属于合并?

php - 如何实现大批量的高性能批量图像转换?

php - 如何获取id为0的mysql连接结果

c# - 单元测试未显示为覆盖方法

android - HTML5 应用的响应式网页设计高度单位

Laravel 5.4 无法登录用户

javascript - 如何处理 php (Laravel api) 和 javascript (AngularJS) 之间的日期时间

php - 使用正则表达式获取文本开头的 # 个字符