运行单测时Codeception找不到class

Codeception can't find class when running single test

我正在为我目前正在进行的项目编写 API 测试套件。

我可以成功运行套件使用

codecept run api

并且所有测试都成功通过,但是每当我尝试使用

进行单个测试时 运行
codecept run api Tests\Users\Get

抛出以下错误:

PHP Fatal error: Class 'Tests\ApiCest' not found in /Users/Username/Programming/PHP/Project/tests/api/Tests/Users/GetCest.php on line 12

这是我正在使用的文件夹结构:

ApiCest.php只是用来快速bootstrap其他的测试。这是它的内容:

namespace Tests;

/*
 * This class is extended by the API tests.
 */
use ApiTester;

class ApiCest
{
    public function _before(ApiTester $I)
    {
        $I->prepareRequest();
    }

    public function _after(ApiTester $I)
    {
        // All API responses must be in a JSON format.
        $I->seeResponseIsJson();
    }
}

这就是它在 GetCest.php 中的使用方式:

namespace Tests\Users;

use ApiTester;
use Codeception\Util\HttpCode;
use Tests\ApiCest;

/*
 * Tests for the GET /users API endpoint.
 */
class GetCest extends ApiCest
{
    // Tests methods are here but omitted
}

发生这种情况是因为 Tests\Users\GetCest class 扩展了 Tests\ApiCest class,但是没有为测试 classes 设置自动加载。

将此块添加到您的 composer.json 文件:

"autoload":{
    "psr-4":{
        "Tests\": "tests/api/Tests"
    }
}

如果您已经有 autoload psr-4 块,只需向其中添加 "Tests\": "tests/api/Tests" 行。