我如何在Codeception中编写可重用的方法/操作?

问题描述 投票:0回答:1

我正在使用Codeception编写一组API测试,而我希望在每个测试中使用的一种方法看起来像:

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);
            }
        );
    }
}

我确实读过文档herehere,但对我来说还不太清楚如何在这种情况下实现可重用性。

我想知道是否有一种方法可以将其添加为Helper的一部分,这样它就可以在任何单个测试中重复使用,而无需重复代码。有任何想法和/或帮助吗?

php testing codeception web-api-testing
1个回答
0
投票
我有我的答案here。这是我遵循的步骤:

  • 通过运行命令创建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

    © www.soinside.com 2019 - 2024. All rights reserved.