Codeception не может найти класс при запуске одного теста

Я пишу набор тестов API для проекта, над которым сейчас работаю.

Я могу успешно запустить пакет, используя

codecept run api

и все тесты проходят успешно, но всякий раз, когда я пытаюсь запустить один тест, используя

codecept run api Tests\Users\Get

возникает следующая ошибка:

Неустранимая ошибка PHP: класс 'Tests \ ApiCest' не найден в /Users/Username/Programming/PHP/Project/tests/api/Tests/Users/GetCest.php в строке 12

Вот структура папок, которую я использую:

Структура папки

ApiCest.php используется только для быстрой загрузки других тестов. Вот его содержание:

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
}

person siannone    schedule 20.04.2017    source источник


Ответы (1)


Это происходит потому, что Tests\Users\GetCest класс расширяет Tests\ApiCest класс, но автозагрузка не настроена для тестовых классов.

Добавьте этот блок в свой файл composer.json:

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

Если у вас уже есть autoload psr-4 блок, добавьте к нему всего "Tests\\": "tests/api/Tests" строку.

person Naktibalda    schedule 20.04.2017
comment
Спасибо. Я пробовал делать это раньше, но это не сработало. Думаю, я сделал это неправильно :) Ой, я также использовал autoload-dev вместо autoload. - person siannone; 21.04.2017