Как мне написать повторно используемый метод / действия в Codeception? - PullRequest
0 голосов
/ 10 октября 2019

Я пишу набор API-тестов с использованием Codeception, и один из методов, который я хотел бы использовать в каждом отдельном тесте, выглядит следующим образом:

public function ActionWasNotDoneIfParamsAreMissing(ApiTester $I): void
{
    $url = $this->serviceUrl;
    $method = $this->method;

    $dataCombination = $I->pcArrayPowerSet($this->data);
    foreach ($dataCombination as $combination) {
        $I->seeExceptionThrown(
            BadRequestHttpException::class,
            static function () use ($I, $url, $combination) {
                $I->$method($url, $combination);
            }
        );
    }
}

Я прочитал документы здесь и здесь , но мне не очень понятно, как добиться повторного использования в этом сценарии.

Интересно, есть ли способ добавить это как часть Помощника, чтобы он мог бытьповторно использовать в любом отдельном тесте без необходимости повторять код. Любые идеи и / или помощь?

1 Ответ

0 голосов
/ 14 октября 2019

Я получил свой ответ здесь . Вот шаги, которые я выполнил:

  • Создайте класс StepObject, выполнив команду:

    php vendor/bin/codecept generate:stepobject api CommonTest
    
  • Настройте метод какследуйте:

    public function checkIfHttpMethodIsNotAccepted(
        string $serviceUrl,
        array $notAllowedMethod = [],
        array $data = []
    ): void {
        $I = $this;
        foreach ($notAllowedMethod as $method) {
            $I->seeExceptionThrown(
                BadRequestHttpException::class,
                static function () use ($I, $serviceUrl, $method, $data) {
                    $I->$method($serviceUrl, $data);
                }
            );
        }
    }
    
  • Вызовите новый метод из класса тестирования:

    public function ActionWasNotDoneIfHttpMethodIsNotAccepted(Step\Api\CommonTest $I): void
    {
        $I->checkIfHttpMethodIsNotAccepted(
            $this->serviceUrl, 
            self::$notAllowedMethod, 
            $this->data
        );
    }
    

С этого момента мне просто нужно сделатьпоследний на моих тестовых классах и не повторять код везде. Надеюсь, это кому-нибудь поможет!

Примечание: Если по какой-либо причине у вас возникли ошибки, запустите команду php vendor/bin/codecept build перед запуском любого набора тестов.

...